首页 > 其他分享 >LeetCode80. 删除有序数组中的重复项 II题解

LeetCode80. 删除有序数组中的重复项 II题解

时间:2024-06-19 14:55:15浏览次数:26  
标签:slow 删除 nums 重复 题解 fast LeetCode80 II 数组

LeetCode80. 删除有序数组中的重复项 II题解

题目链接:

https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/

题目描述:

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

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

示例:
输入:nums = [0,0,1,1,1,1,2,3,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

思路

以题目给出的示例而言,我们可以把数组分为两个部分:

前一部分是不需要删除的,也就是每个数字重复数量不大于2的

后一部分是需要删除的

我们可以定义快慢指针:

我们可以定义快慢指针:

快慢指针的定义

[0,slow-1]代表不需要删除区域;

[slow,fast-1]代表需要重复的区域;

[fast,n-1]代表未处理的区域。

循环逻辑

  1. 初始化快慢指针slow,fast,均初始化为2(注意:前两个元素肯定重复次数不大于2);
  2. 如果nums[fast] 不等于 nums[slow - 2],说明遇到重复次数不超过2的元素,那么就把 nums[slow] 赋值为nums[fast],并把slow指针向后移动;
  3. fast指针向后移动

直到fast超出数组长度。

然后返回slow的值,就是所求数组长度。

代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        if(nums.length <= 2) return nums.length;
        int slow = 2,fast =2;
        while(fast < nums.length){
            if(nums[fast] != nums[slow - 2]){
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}

标签:slow,删除,nums,重复,题解,fast,LeetCode80,II,数组
From: https://www.cnblogs.com/nicaicai/p/18256227

相关文章

  • LeetCode26. 删除有序数组中的重复项题解
    LeetCode26.删除有序数组中的重复项题解题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array题目描述:给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一......
  • 代码随想录算法训练营第四十三天 | 完全背包理论基础、518.零钱兑换II、377. 组合总和
    完全背包理论基础题目链接:https://kamacoder.com/problempage.php?pid=1052文档讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F…视频讲解:https://www.bilibili.com/video/BV1uK411o7c9/思路完全背包中,每个物品可以......
  • 请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ASCII码降序排列
    请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ASCII码降序排列#include<stdio.h>#include<string.h>voidsortDescending(charstr[]){intlen=strlen(str);if(len!=7) {printf("字符串长度不为7,无法进行排序。\n");......
  • 代码随想录算法训练营第42天 | 1049. 最后一块石头的重量 II 、494. 目标和 、474.一
    最后一块石头的重量II本题就和昨天的416.分割等和子集很像了,可以尝试先自己思考做一做。视频讲解:https://www.bilibili.com/video/BV14M411C7oVhttps://programmercarl.com/1049.最后一块石头的重量II.html这三体=题都没啥思路/***@param{number[]}stones*@re......
  • Day 26| 39. 组合总和 、 40.组合总和II 、 131.分割回文串
    组合总和本题是集合里元素可以用无数次,那么和组合问题的差别其实仅在于startIndex上的控制题目链接/文章讲解:https://programmercarl.com/0039.组合总和.html视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ给定一个无重复元素的数组candidates和一个目标数targ......
  • python系列&AI系列:cannot import name ‘ForkProcess‘ from ‘multiprocessing.conte
    cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问题解决cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问题解决问题描述问题原因解决方案cannotimportname‘ForkProcess‘from‘multiprocessing.context‘问......
  • 【ACM独立出版/Fellow大咖云集】 第三届机器人、人工智能与信息工程国际学术会议(RAIIE
    2024年第二届机器人、人工智能与信息工程国际学术会议(RAIIE2024)将于2024年7月5-7日在新加坡举行。本次会议主要围绕“机器人”、“智能仿生”和“信息科学”的最新研究进展展开,会议汇聚了该领域内国际学者、专家、研究人员及相关从业人员,分享研究成果,探讨机器人的最新发展趋势,为......
  • CF1537F 题解
    一道结论型的图论题。约定:偶环:节点个数为偶数的环使得任意不相同两点之间有且仅有2条简单路径的环。奇环:节点个数为奇数的环使得任意不相同两点之间有且仅有2条简单路径的环。令点\(i\)的权值为\(a_i\),有\(a_i=t_i-v_i\),其中\(v_i,t_i\)为题目给出的。称一个图为好......
  • 2023年10月 00023高等数学(工本)真题解析
    说明2023年10月00023高等数学(工本)真题解析单选题在空间直角坐标系中,点(1,1,0)在(A)A.Oxy平面B.Oxz平面C.Oyz平面D.z轴极限\(\lim\limits_{x\rightarrow0\atopy\rightarrow3}xsin\dfrac{1}{xy}=\)(A)A.0B.1C.3D.不存在解:\[x\rightarrow0,y\rightarrow3时x\r......
  • 【前端面经】数组算法题解
    目录题目一:两数之和题目二:最长无重复字符子串题目三:合并两个有序数组题目四:寻找数组中的峰值题目一:两数之和描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。......