Given a sorted array, remove the duplicates in-place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
去除有序数组重复元素
思路:不让用额外空间,那么就在原数组上操作
1.设置指向flag
public int removeDuplicates(int[] nums) {
if(nums.length == 0)
return 0;
int flag = nums[0];
int end = 0;
for(int i = 0; i < nums.length; i++){//flag为当前不重复的数,end新的数组下标
if (nums[i] != flag){
flag = nums[i];
end++;
nums[end] = nums[i];
}
}
for (int j = 0; j < end+1; j++) {
System.out.print(nums[j]);
}
return end+1;
}
方法二:他是排序数组,flag 指向前面一个数,若不等,则把后一个数传给flag指向的数.
int flag = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != nums[flag]){
flag++;
nums[flag] = nums[i];
}
}
return flag+1;
如果改变条件每个数可以出现两次呢
public int removeDuplicates(int[] nums) {
if(nums.length == 0)
return 0;
int flag = nums[0];//当前保留的的最后一个指向的数
int end = 0;//下标
int at = 1;//appear times
for(int i = 1; i < nums.length; i++){
if(nums[i] == flag){
if(at < 2){
at++;
flag = nums[i];
end++;
nums[end] = nums[i];
}
}
else{
flag = nums[i];
end++;
nums[end] = nums[i];
at = 1;
}
}
for(int j = 0; j < end+1; j++)
{
System.out.println(nums[j]+"\n");
}
return end+1;
}