LeetCode面向运气之Javascript—第26题-删除有序数组中的重复项-99.18%

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]

思路

  1. 他是一个升序排列的数组
  2. 那我可以记录一下当前值,初始值就是nums的第一项
  3. 循环对比,如果比当前值大,就改变一下当前值
  4. 需要在定义个游标记录当前循环的值需要放到nums第几个(循环的值比当前值大的时候就得放),然后游标+1
  5. 再需要一个最大值,如果到最大值了就直接break掉循环
  6. 最后通过游标的值截取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)
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值