[leetcode刷题]面试经典150题之4删除有序数组中的重复项II(中等)

server/2024/9/24 10:12:30/

思路大致跟上一题一样

题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解决思路:

  1. 双指针法:可以使用两个指针,一个用于遍历数组,另一个用于跟踪新数组中允许的唯一元素的位置。
  2. 保持最多两次重复:由于数组是有序的,我们只需要关注每个元素的出现次数是否大于 2 次。因此,对于每个元素,允许其最多出现两次。

具体步骤:

  1. 使用两个指针 ij

    • i:是慢指针,表示当前数组中有效元素的最后一个位置。
    • j:是快指针,用于遍历数组。
  2. 初始化 i = 1,表示前两个元素无论如何都需要保留,因为我们允许元素最多出现两次。

  3. 从第三个元素(j = 2)开始遍历数组:

    • 如果当前元素 nums[j] 不等于 nums[i-1],说明它与前两个元素不同或者第一次遇到这个元素,我们可以将其放到 nums[i+1] 位置。
    • 如果相等,则跳过这个元素。
  4. 遍历结束后,i+1 就是最终数组的长度。

代码

class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) <= 2:  # 如果数组长度小于等于2,直接返回长度return len(nums)i = 1  # 慢指针,指向有效数组的末尾for j in range(2, len(nums)):  # 快指针,从第三个元素开始遍历if nums[j] != nums[i-1]:  # 如果当前元素与nums[i-1]不同i += 1  # 移动慢指针nums[i] = nums[j]  # 更新有效数组return i + 1  # 返回数组长度


http://www.ppmy.cn/server/121298.html

相关文章

互联网应用安全

互联网应用安全 1.端口管控2.Web应用安全3.系统安全4.网络安全5.数据安全6.业务安全7.互联网DMZ区安全管控标准 1.端口管控 首先要做的就是端口管控&#xff0c;即在防火墙上严格限制对外开放的端口。原则上DMZ服务器只允许对外开放80、443端口&#xff0c;而且DMZ服务器不允许…

计算机毕业设计之:基于微信小程序的共享充电桩系统的设计与实现

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

git删除本地+远程提交记录

//撤销本地仓库提交 1.git log 2.git reset --soft 指定commit版本号 git reset --soft "版本号"&#xff1a;重置至指定版本的提交。这里我们指定版本号为 ②&#xff0c;从而达到撤销 ①的目的。 参数 soft&#xff1a;保留当前工作区&#xff08;代码和文…

Golang | Leetcode Golang题解之第430题扁平化多级双向链表

题目&#xff1a; 题解&#xff1a; func dfs(node *Node) (last *Node) {cur : nodefor cur ! nil {next : cur.Next// 如果有子节点&#xff0c;那么首先处理子节点if cur.Child ! nil {childLast : dfs(cur.Child)next cur.Next// 将 node 与 child 相连cur.Next cur.Chi…

vue3中使用nexttick

1、引入 import { nextTick } from vue 2、具体使用&#xff0c;配合异步 setup() {const message ref(Hello!)const changeMessage async newMessage > {message.value newMessageawait nextTick()console.log(Now DOM is updated)}} 3、具体使用&#xff0c;普通 方…

flutter 设置字体大小,适应各种屏幕

起因&#xff0c; 目的: 来源就是客户需求。 从个人角度来说&#xff0c;我讨厌 flutter, 和 java 一样&#xff0c; 都是 臃肿&#xff0c;繁琐&#xff0c;死板. 1. 过程: 根据用户的屏幕尺寸&#xff0c;把子元素大小&#xff0c; 字体的大小&#xff0c;都设置为百分比&…

uniapp使用uview2上传图片功能

官网地址Upload 上传 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 前提&#xff0c;需要下载vuew2插件 <view class"upload"><view class"u-demo-block__content"><view class"u-page__upload-item"&…

HarmonyOS鸿蒙开发实战(5.0)悬浮窗拖拽和吸附动画实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看&#xff08;持续更新......&#xff09; HarmonyOS NEXT应用开发性能实践总结 HarmonyOS NEXT应用开发案例实践总结合集 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门…