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

本文阅读 2 分钟
首页 代码,Java 正文

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

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

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

这道题目其实就是说,数组中如果存在重复元素的话,那么这个元素只能出现两次。像这种原地修改的题目,很容易就想到双指针

  • 慢指针 slow : 指向当前即将放置元素的位置;则 slow - 1 是刚才已经放置了元素的位置。
  • 快指针 fast : 向后遍历所有元素;
  • 所以让 nums[fast] 跟 nums[slow - 2] 进行比较。每次都是只允许最多两个元素出现重复,这两个元素的位置在 slow - 1 和 slow - 2.
  • 从题目我们可以分析得出,前两个元素肯定是要保留下来的

img img

img img img

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

        return slow;
    }
}
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://zengyihong.blog.csdn.net/article/details/125686834
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复