1.题目描述:
给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么nums的前k个元素应该保存最终结果。将最终结果插入nums的前k个位置后返回k。不要使用额外的空间,你必须在原地修改输入数组在使用O(1)额外空间的条件下完成。
2.双指针:
与leetcode27. 移除元素的双指针写法存在细微区别,注意区分。
class Solution {
public int removeDuplicates(int[] nums) {
int slowIndex = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != nums[slowIndex]) {
nums[++slowIndex] = nums[i];//保证每次比较最末尾的slowIndex位置
}
}
return slowIndex + 1;
}
}