题目:
给定一个排序数组,需要在原地删除重复项,并返回移除后的数组新长度。
解法:
设置两个指针,慢指针i和快指针j
如果nums[i]==nums[j]时,就表示j指向的这一项属于重复项,j继续往后循环
如果nums[i]!=nums[j]时,表示j指向的这一项不属于重复项,把这个元素赋值到i的下一项。
class Solution {
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]){
i++;
nums[i]=nums[j];
}
}
return i+1;
}
}
时间复杂度:O(n),空间复杂度:O(1)