题目描述:
给定一个排序数组,需要在原地删除重复出现的元素,使得每个元素只出现一起,返回移除数组的新长度。不要使用额外的数组空间,必须在原地修改输入数组,并在使用O(1)额外空间的条件下完成。
实现思路:
1.在实现过程中不能使用新的数组
2.需要返回的实质就是所有不重复元素的总和(s),并且需要将数组的前面等于(s-1)位置的所有值换成不重复的元素
3.双指针法:定义慢指针i,快指针j。当nums[j] != nums[i]时,则此时j所指的元素为出现的新元素,则慢指针向后移一位,并将此时j对应的值nums[j]赋给i对应的nums[i]。
代码实现:
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
// 先判断该数组是否为空
if(nums.length == 0) return 0;
// 先定义慢指针
let i = 0;
// 遍历原数组,定义一个快指针
for(let j = 1; j < nums.length; j++) {
// 当快后一个数不等于前一个数时
if(nums[j] != nums[i]) {
// 则慢指针加一
i ++
// 再将j(新出现的值)赋给向后移的i对应的值
nums[i] = nums[j];
}
}
//返回的数组长度的话,需要加一
return i+1;
};