LeetCode-80. 删除有序数组中的重复项 II-⭐⭐

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

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

LeetCode-80. 删除有序数组中的重复项 II-⭐⭐_第1张图片

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按升序排列

解析思路:这道题妙就妙在了一个地方,就是slow-2这个操作上,首先啊,我们肯定是要判断这个数组长度是否大于2,不大于2,直接返回长度即可,然后还是快慢指针,快指针在前,满指针灾后,但是判断的是nums[slow-2]和nums[fast]的值,如果相等,满指针不动,快指针向前,如果不相等,慢指针被赋值为快指针的值,并且慢指针向前移动。

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int fast = 2;
        int slow = 2;
        if(n<=2){
            return n;
        }
        while(fast

LeetCode-80. 删除有序数组中的重复项 II-⭐⭐_第2张图片

打完收工! 

你可能感兴趣的:(LeetCode-中等,算法)