自己解法
这个题其实就是保存下当前重复的元素,和数组填充的不重复下标,然后遍历,遇到不重复的就重新记录和保存就好了,时间复杂度为O(N),空间复杂度为O(1)。
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0 || nums.length == 1) {
return nums.length;
}
int temp = nums[0];
int j = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] != temp) {
temp = nums[i];
nums[++j] = temp;
}
}
return j + 1;
}
}
官方解法
官方解法和自己解法类似,少了一个temp变量,直接用nums[i]来代替
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
网友评论