算法题目来源:力扣(LeetCode)
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
/*想法:设定两个指针,一个用以遍历数组元素一个用以确定不重复元素下标,开始时候slow指针和fast指针都为1,
然后开始遍历fast往前走,当fast指向的当前元素与前一个不等时,判定出现不重复的新元素,将新元素赋值给slow下标
slow指向下一个元素,fast往前走*/
/**
* @param {number[]} nums
* @return {number}
*/
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;
};
let nums=[1,2,2,2,3,4,4]
console.log(removeDuplicates(nums))
//4
//[1,2,3,4,3,4,4]