解法一:解法一是我最喜欢的解法,将设一个指针count,遇到相等的跳过 不管他,遇到不相等的添加到nums[count],然后count++。
时间复杂度O(N),空间复杂度O(1)
public int removeDuplicates(int[] nums) {
if(nums.length < 2) return nums.length;
int count = 1;
for(int i = 1; i < nums.length; ++i) {
if(nums[i] != nums[i-1]) {
nums[count++] = nums[i];
}
}
return count;
}javaScript描述:
var removeDuplicates = function(nums) {
if (nums.length < 2) return nums.length;
let count = 1;
for (let i = 1; i < nums.length; i++) {
if(nums[i] != nums[i - 1]) {
nums[count++] = nums[i];
}
}
return count;
};
解法二:双指针,设指针i和j
时间复杂度O(N),空间复杂度O(1)
public int removeDuplicates(int[] nums) {
int i = 0;
for (int j = 1; j < nums.length; ++j) {
if (nums[i] != nums[j]) {
nums[++i] = nums[j];
}
}
return i+1;
}
解法三:和解法一差不多,不过比解法一多做了几步
public int removeDuplicates(int[] nums) {
int count = 0;
int n = nums.length;
for (int i = 1; i < n; i++) {
if (nums[i] == nums[i - 1]) {
count++;
}else {
nums[i - count] = nums[i];
}
}
return n - count;
}