版权声明:版权所有,转载请注明原网址链接。 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解题报告: