题意:输入一个有序数组,删除重复元素满足每个元素只出现一次,返回数组的新长度
要求:不要为新数组分配空间,空间复杂度为O(1)
思路:由于该数组是有序的,重复的元素必定相邻,设置游标表示当前不同的元素,记录不同元素的个数.
public int removeDuplicates(int[] nums) {
if(nums.length == 0 || nums == null){
return 0;
}
int newLength = 0, cur, next;
for(cur = 0; cur < nums.length;){
newLength++;
int eleCur = nums[cur];
for(next = cur + 1; next < nums.length; next++){ //O(n)
if(nums[next] != eleCur){
nums[newLength] = nums[next];
break;
}
}
cur = next;
}
return newLength;
}