美文网首页
80. 删除排序数组中的重复项 II

80. 删除排序数组中的重复项 II

作者: 滨岩 | 来源:发表于2020-11-08 00:41 被阅读0次

给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路类似:https://www.jianshu.com/p/bc9dc47398a6

 public int removeDuplicates(int[] nums) {
        if (nums.length <= 1) {
            return nums.length;
        }

        int dupCount = 0;//从1开始
        int dupVal = nums[0];
        int dupIndex = 1;
        for (int i = 1; i < nums.length; i++) {
            //允许重复2次
            if (dupVal == nums[i] && dupCount <1) {
                dupCount++;
                swap(nums, dupIndex, i);
                dupIndex++;
                continue;
            }

            //允许重复2次
            if (dupVal == nums[i] && dupCount == 1) {
                continue;
            }

            //因为是有序数组
            if (nums[i - 1] != nums[i]) {
                dupCount = 0;
                dupVal = nums[i];
            }
            //处理特殊情况 元素都不相同的情况
            if (dupIndex != i) {
                swap(nums, dupIndex, i);
            }
            dupIndex++;
        }

        return dupIndex;
    }


    private void swap(int[] nums, int source, int target) {
        int temp = nums[source];
        nums[source] = nums[target];
        nums[target] = temp;
    }

相关文章

网友评论

      本文标题:80. 删除排序数组中的重复项 II

      本文链接:https://www.haomeiwen.com/subject/fmscbktx.html