题目如下:
给出的输出示例如下:
分析:
如题,想解决这个问题并不是很难,利用left和right两个数组下标进行循环操作,值得注意的是,由于该数组中的第一个元素一定不会被删除,所以两个数组下标的索引值不能从0开始,应赋值为1。
代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
int left=1,right=0;
for(right=1;right<nums.length;right++){
if(nums[right]!=nums[right-1]){
nums[left]=nums[right];
left++;
}
}
return left;
}
}
-
时间复杂度:O(n),其中 n 是数组的长度,快指针和慢指针最多各移动 n 次。
-
空间复杂度:O(1),只需要使用常数的额外空间。