先读题
什么是非严格递增?
非严格递增序列:指的就是整个序列是从小到大的,但是里边会有一些数字会在它本身周围有重复。
如->(1,1,1,2,3,4,5,6,6,6,7,8,9)
严格递增序列:就是数字没有重复,且是递增的。
如->(1,2,3,4,5,6,7,8,9)
这道题用的快慢指针,慢指针len记录下一个存放的索引位置(len+1),快指针遍历从索引1开始到n-1的每一个数,判断nums[i]是否等于nums[len],如果不等于,则将索引i的元素复制到nums[len+1]的位置上;等于的话i++,往后遍历。
class Solution {
public int removeDuplicates(int[] nums) {
//用两个索引,一个记录不重复的长度,一个往后检索
if (nums.length==1) return 1;
int len=0;
int i=1;
while (i<nums.length){
if (nums[i]!=nums[len]){
nums[len+1]=nums[i];
len++;
i++;
}else{
i++;
}
}
return len+1;
}
}