26. Remove Duplicates from Sorted Array

Leetcode link

题目简介

/**
 * @param {number[]} nums
 * @return {number}
 */

题目要求我们把一个排序好的递增数组 nums 在数组内部去重

最后返回数组内不同元素的个数,nums 中的不同元素必须在前面部份

解题思路

要解答这题我们首先需要一个指针 i 用来遍历整个数组

其次,为了将当前遍历到的新元素替换前面遇到的重复元素,我们需要另一个指针 dup 来指向数组最左边重复的元素

所以这道题我们需要用到双指针中的快慢指针

所以这个问题就变成了我们要如何操作我们的两个指针呢?

首先我们从数组元素来逐个判断:

  1. 第一个元素必定是新元素,所以它不可能是重复元素
  2. 数组的第二个元素有可能是重复元素,所以我们指向重复元素的慢指针 dup 初始值应该是指向第二个元素(也就是下标 1)
  3. 如果第二个元素是重复元素(通过 nums[dup - 1] === nums[i] 判断)我们只需要更新 i 指针
  4. 如果第二个元素不是重复元素,我们需要做两件事:
    1. 将当前 i 指针指向的值(也就是新的元素)赋值给下标 dup 的元素
    2. 更新 dup 指针的位置

Javascript

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function (nums) {
    // 'dup' points to the position where the next unique element should be placed
    let dup = 1

    for (let i = 1; i < nums.length; i++) {
        // If the current element is different from the previous unique one,
        // move it to the 'dup' position and advance 'dup'
        if (nums[dup - 1] !== nums[i]) {
            nums[dup] = nums[i]
            dup++
        }
    }
    return dup
};

results matching ""

    No results matching ""