LeetCode之--删除有序数组中的重复项

89 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。

前言

最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--删除有序数组中的重复项。

题目

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

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例

image.png

题解

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
     let slow = 0, fast = 0, len = nums.length;
    while(fast < len) {//当快指针小于数组长度时
        if(nums[slow] === nums[fast]) {//如果快慢指针相等
            fast++;//快指针加1
        } else {//如果不相等
            slow++;//满指针加1
            nums[slow] = nums[fast];//并且直到快慢指针相等为止
        }
    }
    return slow + 1;//返回满指针加1,得出结果


};

分析

快慢指针

  1. 头尾指针值一样时,尾指针右移
  2. 头尾指针值不一样时,头指针右移后,尾指针赋值给头指针