首页 > 编程语言 > 详细

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

时间:2021-04-06 23:28:19      阅读:32      评论:0      收藏:0      [点我收藏+]

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii

注意题目关键字,1. 有序数组;2. 每个元素最多出现两次 3. 不适用额外的空间

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        //题目中写到每个元素最多出现两次,如果数组长度为2活着小于2 可以直接返回数据的 
        //长度,最大也就是两个元素相等
        if (n <= 2) {
            return n;
        }
        //这里快慢指针从2开始,然后因为是有序数组,所以nums[slow-2]如果等于nums[fast]
        //那么必然得出nums[slow-2] == nums[slow-1] == nums[fast]  比如一个数组 1,2,
        //第三个肯定不可能是1了,如果第三个和第一个相等,因为是有序数组,第二个肯定也和他们相等
        int fast = 2;
        int slow = 2;
        while (fast < n) {
            if (nums[slow-2] != nums[fast]) {
                //这里找到超过两个不相等的元素,将fast下标的元素赋值给slow下标,slow指针接着往后走
                nums[slow] = nums[fast];
                slow++;
            }
            fast++
        }
        return slow;
    }
}

  

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

原文:https://www.cnblogs.com/jlsblog/p/14623752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!