26.删除有序数组中的重复项

      这一题一开始没读懂,后来逐渐清晰,主要有几点前提条件需要明确:

1.我们处理的是有序的数组,即从小到大排序,进一步而言就是,如果有重复的元素,那么他们一定都是相邻的。例如:

[0,1,2,3,3,3,3,4,4,5,6,7,8,8]

2.我们函数要返回一个整数num,num表示删除了重复元素后的数组的长度,提交代码以后,输出的是处理过后的数组的前num个数字。这一点要看leetcode官网的解释

 

以上面的为例子,输出应该是:

[0,1,2,3,4,5,6,7,8]

3.题目要求“原地”修改,这是可行的,因为我们的  函数接收一个数组作为参数,而数组又是“引用”类型数据,因此我们在函数内对数组进行修改,数组地址所对应的内容也会相应地被更改。不理解的话需要提前学习一下“引用类型”是什么。

4.结合例子,就能读懂题目的意思

思路:双指针,慢指针用来更新数组,快指针用来遍历数组,作比较。

代码 v_1:代码太臃肿,需要简化一下

var removeDuplicates = function (nums) {
  let len = nums.length;
  let i = 0;
  let j = 1;
  let len2 = 1;
  for (; i < len && j < len; i++) {
    for (; j < len; j++) {
      if (nums[i] != nums[j]) {
        nums[i + 1] = nums[j];
        len2++;
        break;
      }
    }
  }
  return len2;
};

 代码v_2:

var removeDuplicates = function(nums) {
    let len = nums.length;
    let i = 0;
    let j = 1;
  
    for (; j < len; j++) {
        if (nums[i] != nums[j]) {
            i++;
            nums[i] = nums[j];
        }
    }
  
    return i+1;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值