js数据结构与算法_18_删除排序数组中的重复项

本文介绍了如何通过双指针技术解决力扣初级算法中的一道题目,要求在保持升序排列的同时,原地删除有序数组中的重复元素。题目解析指出,由于数组有序,可以设置两个指针,一个遍历数组,一个确定有效数组长度,当遍历指针遇到不重复元素时,更新有效数组。此外,还提供了一个基于数组filter方法的去重实现作为衍生方法。
摘要由CSDN通过智能技术生成

题目来自力扣初级算法,供个人学习使用。

1.题目

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

解析:我们要注意的是这是个有序数组,所以相等的元素在数组中的下标一定是连续的。利用数组有序的特点,可以通过双指针的方法删除重复元素。

指针fast用于遍历数组,指针slow用于确定有效数组长度。也就是说下标0~slow-1,为有效数组的下标区间,返回值为slow。

2.题解

/**
 * @param {number[]} nums
 * @return {number}
 */
//给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,
//使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

const array = [1, 2, 3, 4, 4, 5, 5, 6];
var removeDuplicates = function (nums) {
  const n = nums.length;
  // 边界判断
  if (n === 0) return 0;

  // 遍历指针
  let fast = 1;
  //有效数组长度指针
  let slow = 1;

  while (fast < n) {
    if (nums[fast] !== nums[fast - 1]) {
      //   前后不同时,更新有效数组及其长度
      nums[slow] = nums[fast];
      slow++;
    }
    // 更新遍历指针
    fast++;
  }
  // 返回排序好的数组有效长度
  return slow;
};
console.log(removeDuplicates(array));
console.log(array);

3.衍生

这里附赠一个去重方法

function arrDeduplication(arr) {
  return arr.filter((item, index) => array.indexOf(item) === index);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值