26 删除排序数组中的重复项
Tag: Array
Two pointers
Difficulty: Easy
分析
题目要求不要使用另一个数组分配额外空间,即O(1)
的空间复杂度。
这里我们使用双指针法
给定两个指针i ,j,i为慢指针,j为快指针,i指向当前元素,j指向下一个不与当前重复的元素
当nums[i] == nums[j] 时,即出现重复元素,增加j以跳过重复项
当nums[i] != nums[j] 时,跳过重复项的行为结束,将nums[j]赋给nums[i+1],并增加i
直到j到达最后一个元素是结束
题解
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j=1; j<nums.length; j++) {
if (nums[i] != nums[j]) {
nums[i+1] = nums[j];
i++;
}
}
return i+1;
}
复杂度分析
时间复杂度 O(n)
空间复杂度 O(1)