Remove Duplicates From Sorted Array
lc 26
constant space 要求 所有的元素包括重复的值存一次
public int removeDuplicates(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int end = 0;
for(int i = 0; i < nums.length; i++){
while( i < nums.length - 1 && nums[i] == nums[i + 1]){
i++;
}
nums[end] = nums[i];
end++;
}
return end;
}
lc 80
可以重复两次,做法完全一致,只是用来判断到底是不是重复元素,如果似的话,那么久移动2个就好了,如果不是重复元素的话,那么只移动一位其他的完全一样
public class Solution {
public int removeDuplicates(int[] nums) {
if(nums == null || nums.length == 0) return 0;
int end = 0;
for(int i = 0; i < nums.length; i++){
int count = 1;
while(i < nums.length - 1 && nums[i] == nums[i + 1]){
count++;
i++;
}
if(count == 1){
nums[end] = nums[i];
end++;
}else{
for(int k = 0; k <= 1; k++){
nums[end] = nums[i];
end++;
}
}
}
return end;
}
}
下面是非常简练的写法自己写不出来
public int removeDuplicates(int[] nums) {
int i = 0;
for (int n : nums)
if (i < 2 || n > nums[i-2])
nums[i++] = n;
return i;
}