LeetCode第26题-删除有序数组中的重复项
题目要求
一个升序排列的数组nums
,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。然后返回 nums 中唯一元素的个数。
原地
说是一个算法名称—原地算法,我理解的就是不改变原数据的引用地址
举例
输入:nums = [1,1,2]
输出:2, nums = [1,2,]
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
思路
- 他是一个升序排列的数组
- 那我可以记录一下当前值,初始值就是nums的第一项
- 循环对比,如果比当前值大,就改变一下当前值
- 需要在定义个
游标
记录当前循环的值需要放到nums第几个(循环的值比当前值大的时候就得放),然后游标+1 - 再需要一个最大值,如果到最大值了就直接break掉循环
- 最后通过游标的值截取nums
代码实现
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function (nums) {
let current = nums[0];
let vernier = 1;
const max = nums[nums.length - 1]
for (let i = 1; i < nums.length; i++) {
if (current === max) break
if (current === nums[i]) continue
else {
current = nums[i]
nums[vernier] = nums[i]
vernier++
}
}
nums.splice(vernier)
};