题目
截图自官方
代码
class Solution {
// 这个题自己的解法太丑陋。
// 一开始排完序后对如何返回res一直处理错误。不是多一个就是少一个。
// 后来想到应该排完序后,重新遍历一遍记录长度就行。这种思路简单些。
// 结果的时间,空间复杂度爆炸。
// public int removeDuplicates(int[] nums) {
// if(nums.length==0){
// return 0;
// }
// // 这个不要也行
// // if(nums.length==1){
// // return 1;
// // }
// if(nums[0]==nums[nums.length-1]){
// return 1;
// }
// int n=nums.length;
// int res=1;
// // 排序过程
// for(int first=1;first<n;first++){
// if(nums[first]<=nums[first-1]){
// for(int second=first+1;second<n;second++){
// if(nums[second]>nums[first-1]){
// nums[first]=nums[second];
// break;
// }
// }
// if(nums[first]==nums[nums.length-1]){
// break;
// }
// }
// }
// // 重新遍历一遍记录长度就行
// for(int i=1;i<n;i++){
// if(nums[i]<=nums[i-1]){
// break;
// }
// res++;
// }
// return res;
// }
// 官方双指针大法
// 思路:只要j等于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[i]!=nums[j]){
i++;
nums[i]=nums[j];
}
}
return i+1;
}
}