题目描述
题目分析
- 根据说明中的条目,且题目要求在原地进行修改可知,操作数组的过程可以直接在数组内部操作,且返回的长度即要输出的数组范围
- 换成人话说,最后处理完成的结果就是
数组的前面部分就是无重复项的数组内容,其余后面的不用管
- 给出的数组是
排好序的
解法分析 — 双游标法
- 分析可知,这道题只能在原数组上进行操作,那么就需要用到游标了,
一个用来遍历数组,一个用来保存结果
- 假设
i
用来遍历,j
用来保存结果,那么就是先遍历,判断两个游标指向的值是否相等,如果不等则赋值给j
,如果相等,则i
继续前进
代码
class Solution {
public int removeDuplicates(int[] nums) {
// 判空
if (nums.length == 0) return 0;
// 两个游标 res用于标记修改值 cur用于遍历数组
int res = 0;
int cur = 1;
// 循环
while(cur<nums.length){
// 不等就修改res值且两个游标都前进
if (nums[cur] != nums[res]){
res++;
nums[res] = nums[cur];
cur++;
} else {
// 相等则cur前进
cur++;
}
}
// 返回的结果要 +1
return res+1;
}
}