这道题目要求:
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
不能创建新的数组,要在原数组上进行修改,用双指针进行数组里面元素的替换即可。
下面代码实现:
class Solution {
public int removeDuplicates(int[] nums) {
int i=0;//头指针
for(int k=1;k<nums.length;k++){//从原数组第二个开始遍历
if(nums[i]!=nums[k]){//当找到不重复元素时
i++;//将头指针向前移动一个位置
nums[i]=nums[k];//并将不重复的值赋给头指针移动后的位置
/*
*举例:
*{0,0,0,1},在遍历到k=3时,找到不重复元素。
*此时头指针i=0,将头指针向前移一个位置,i=1
*将不重复的值赋给头指针移动后的位置
*最后得到的数组结果{0,1,0,1}
*返回有效元素个数为i+1=2
*即{0,1,0,1}前两个元素为有效的元素
*/
}
}
return i+1;//返回有效元素个数
}
}