LeetCode080——删除排序数组中的重复项II

版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/82948816

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/description/

题目描述:

知识点:双指针

思路:用一个指针i遍历nums数组,另一个指针index记录修改后数组的长度

(1)如果i的值小于2,那么显然是不需要修改的,我们可以直接令index指针跟随i指针一起移动。

(2)如果nums[i] == nums[index - 2],说明第i位置的元素是一个重复的元素,我们应该停止index指针的移动。

(3)如果nums[i] != nums[index - 2],说明第i位置的元素不是一个重复的元素,我们令index指针跟随i指针一起移动。

为什么我们可以跳过index - 1位置的元素直接判断i位置的元素和index - 2位置的元素呢?

因为题目给的是一个排序数组,如果nums[i] == nums[index - 2],则必然有nums[i] == nums[index - 1]。

时间复杂度是O(n),其中n为nums数组的长度。空间复杂度是O(1)。

扫描二维码关注公众号,回复: 3435609 查看本文章

JAVA代码:

public class Solution {

    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int index = 0;
        for (int i = 0; i < n; i++) {
            if(i < 2 || nums[i] != nums[index - 2]) {
                nums[index] = nums[i];
                index++;
            }
        }
        return index;
    }
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/82948816