Leetcode 面试150题(三)

一、题目

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k

二、思路

一旦出现原地,基本都要用到双指针。

我们可以使用两个指针来解决这个问题:

  1. 快指针(fast):用于遍历整个数组,找到所有唯一的元素。
  2. 慢指针(slow):用于标记唯一元素的位置,并在原地修改数组。

三、步骤

  1. 初始化两个指针 slowfast,都指向数组的第一个元素。
  2. 遍历数组,使用 fast 指针逐个检查每个元素。
  3. 如果 nums[fast] 不等于 nums[slow],说明找到了一个新的唯一元素,将 nums[slow] 更新为 nums[fast],并将 slow 指针向前移动一位。
  4. 继续移动 fast 指针,直到遍历完整个数组。
  5. 最终,slow 指针的位置加一就是唯一元素的个数 k

① JavaScript代码:

javascript 复制代码
function deleteSame(nums){
    if (nums.length === 0){
        return 0;
    }
    let slow = 0;
    for(let fast = 0; i<nums.length; i++){
        if(nums[fast] !== nums[slow]){
            slow ++;
            nums[slow] = nums[fast];
        }
    }
    return slow + 1;

}

② python代码:

python 复制代码
def deleteSame(nums):
    if not nums:
        return 0
    slow = 0
    for fast in range(len(nums)):
        if nums[fast] != nums[slow]:
            slow += 1
            nums[slow] = nums[fast]
    return slow+1

四、实例

假设我们有一个数组 nums = [1, 1, 2, 3, 3, 4]

  1. 初始状态:slow = 0fast = 1
  2. nums[1] == nums[0]fast 移动到下一个位置。
  3. nums[2] != nums[0]slow 移动到下一个位置,nums[1] = nums[2],此时 slow = 1
  4. nums[3] != nums[1]slow 移动到下一个位置,nums[2] = nums[3],此时 slow = 2
  5. nums[4] == nums[2]fast 移动到下一个位置。
  6. nums[5] != nums[2]slow 移动到下一个位置,nums[3] = nums[5],此时 slow = 3

最终,nums 变为 [1, 2, 3, 4, 3, 4]slow 的值是 3。

由于 slow 指针的值是唯一元素的个数减一,所以唯一元素的个数是 slow + 1 = 4

  • slow 指针的值是唯一元素的个数减一。
  • 为了得到唯一元素的个数,我们需要返回 slow + 1
相关推荐
yyuuuzz3 分钟前
独立站搭建:从基础到避坑的实战分享
前端·javascript·github
programhelp_26 分钟前
Amazon OA 2026 高频题型拆解 + 速通攻略
数据结构·算法
星空椰26 分钟前
JavaScript 基础入门:从零开始掌握变量与数据类型
开发语言·前端·javascript·ecmascript
moonsea020330 分钟前
2026.4.14
数据结构·算法·图论
x_xbx32 分钟前
LeetCode:42. 接雨水
算法·leetcode·职场和发展
竹林8181 小时前
用wagmi v2构建DeFi前端:从连接钱包到读取合约数据的完整实战与避坑指南
前端·javascript
Kinghiee1 小时前
从零打造生产级前端错误监控 SDK:架构设计与 Vue3 实践
前端·javascript·vue.js·去重·错误捕获·上报·离线持久化
吴声子夜歌1 小时前
Vue3——元素样式绑定
前端·javascript·vue.js·es6
lixinnnn.1 小时前
01BFS:小明的游戏
算法
xingpanvip1 小时前
PHP+JS+CSS打造动态星盘计算器
javascript·css·php