给你一个 升序排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
将最终结果插入 nums
的前 k
个位置后返回 k
。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
js题解:
var removeDuplicates = function(nums) {
const n = nums.length;
if (n === 0) {
return 0;
}
let fast = 1, slow = 1;
while (fast < n) {
if (nums[fast] !== nums[fast - 1]) {
nums[slow] = nums[fast];
slow++; // 符合条件才会记录非重复值,且前进一步
}
fast++; // 无论如何每次循环都会前进一步
}
return slow;
};
个人理解:就是fast自由前进,他的任务就是比较前一位是否与其相同;对于slow,他的任务就是记录 fast 比较出来的非重复项,然后才会前进一步,该方法返回的是k,而k恰好也就是slow。