美文网首页
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