​LeetCode刷题实战26:删除排序数组中的重复项

2023-11-12

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 删除排序数组中的重复项,我们先来看题面:

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

题意

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

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

样例

示例 1:

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

题解

数组完成排序后,我们可以放置两个指针 i 和 j,其中 i 是慢指针,而 j是快指针。只要 nums[i] = nums[j]  ,我们就增加 j 以跳过重复项。

当我们遇到 nums[j] ≠nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。

时间复杂度:O(n),假设数组的长度是 n,那么 i 和 j 分别最多遍历 n 步。

空间复杂度:O(1)。

public int removeDuplicates(int[] nums) {
    if (nums.length == 0) return 0;
    int i = 0;
    for (int j = 1; j < nums.length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

上期推文:

LeetCode1-20题汇总,速度收藏!

LeetCode刷题实战21:合并两个有序链表

LeetCode刷题实战23:合并K个升序链表

LeetCode刷题实战24:两两交换链表中的节点

LeetCode刷题实战25:K 个一组翻转链表

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

​LeetCode刷题实战26:删除排序数组中的重复项 的相关文章

随机推荐

  • [BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)

    写在前面 考察知识点 1 git泄露 点击这里下载 选择安装路径后 在该文件夹下路径输入cmd 在命令行中输入 python Githack py 127 0 0 1 git 你的网址后面有 git就行 2 变量覆盖 这里有一题比较简单的变
  • 2022数模国赛C题思路详解-古代玻璃制品的成分分析与鉴别

    完整作品 含代码 文献 数据集 分类答案 正在为您运送作品详情 题目定位 数据分析题 数据量少 维度较多 参考往年题目 2021年国赛B题 一 题目背景分析 这几段主要是交代题目的背景 讲解了古代玻璃制品的特征 解释了其化学成分含量的差异性
  • 手动配置树莓派wifi联网连接热点手机热点

    手动配置树莓派wifi联网连接热点 修改wifi配置文件 运行命令 sudo nano etc wpa supplicant wpa supplicant conf 在文件中添加无线网配置信息 ctrl interface DIR var
  • 使用 Clang Tools —— ClangFormat

    ClangFormat 1 独立的工具 2 Vim 集成 3 Emacs 集成 4 BBEdit 集成 5 CLion 集成 6 Visual Studio 集成 7 用于补丁重新格式化的脚本 Script for patch reform
  • JavaScript中获取对象属性的不同方法

    JavaScript中获取对象属性的不同方法 文章目录 JavaScript中获取对象属性的不同方法 一 点记法 二 方括号记法 三 Object keys 方法 四 Object values 方法 五 Object entries 方法
  • uniapp路由传多个参数_VUE全局路由前置守卫:路由拦截登录校验

    点击右上方红色按钮关注 web秀 让你真正秀起来 前言 在任何一个平台中 如果需要增加用户黏度 除了用户需要的基本内容外 用户登录注册提交信息也是非常重要的一环 可以了解用户基本信息 用户喜欢等 抛出前后端混合开发外 vue可以轻松的实现路
  • Hyperf中RabbitMQ的使用

    1 简单的使用可以参照官方文档的AMQP组件 https hyperf wiki 2 1 zh cn amqp 2 安装过程参照 https www linuxprobe com install rabbitmq on centos 7 h
  • Qt实现点击按钮弹出(关闭)窗口,点击窗口外其他位置关闭窗口

    Qt实现点击按钮弹出 关闭 窗口 点击窗口外其他位置关闭窗口 方法一 在窗口实现类的构造函数中添加如下代码 this gt setWindowFlags Qt Popup 参数Qt Popup 表示 当点击窗口以外就关闭窗口 方法二 直接在
  • python 图片、文件 通过 request header 多线程下载

    写爬虫过程中发现图片下载比较慢 遂使用多线程下载来提速 import threading import requests class MulThreadDownload threading Thread def init self url
  • select回显注意问题

    span style font size 18px js代码 span span style font size 18px var roleName entity roleId 5 roleId val roleName span span
  • 网络安全应急响应预案培训

    应急响应预案的培训是为了更好地应对网络突发状况 实施演 练计划所做的每一项工作 其培训过程主要针对应急预案涉及的相 关内容进行培训学习 做好应急预案的培训工作能使各级人员明确 自身职责 是做好应急响应工作的基础与前提 应急响应预案的培 训分
  • 2024年java面试--mysql(3)

    系列文章目录 2024年java面试 一 spring篇 2024年java面试 二 spring篇 2024年java面试 三 spring篇 2024年java面试 四 spring篇 2024年java面试 集合篇 2024年java
  • Photoshop 之利用 "调整边缘" 抠图

    目录 1 首先 看如下图像 人物图像包含很多头发 2 利用魔棒工具 选中选区 并选择 反向 选中人物图像 3 选择选项栏中的 调整边缘 或者菜单栏中的选择 调整边缘 4 利用调整边缘 修复毛发中的空白部分扣除 5 通过拷贝的图层 将图像抠出
  • 如何安装和使用Android夜神模拟器

    夜神模拟器 是全新一代的安卓模拟器 能够让你在电脑上畅玩手机游戏 与传统安卓模拟器相比 基于Android7 1内核 同时向下兼容Android5 1内核以及X86 AMD 具备极高的兼容性和稳定性 加上超高帧率模式 能够在电脑上运行高性能
  • Antd的Upload+fetch+FormData上传Excel文件请求方式?

    let formData new FormData formData append file fileList 0 fetch 接口名称 method POST headers Content Type multipart form dat
  • 平均年薪60.8万,程序员拿下这个证书有多吃香?!

    互联网行业竞争一年比一年严峻 随着互联网的发展和进步 很多人都是想要进军到编程行业中去 作为工程师的我们唯有不停地学习 不断的提升自己才能保证自己的核心竞争力 打破内卷 从而拿到更好的薪水 进入心仪的企业 前些天 我的程序员哥们和我说 他转
  • Pycharm关闭项目卡住怎么办?

    突然有一天创建新项目的时候 Pycharm卡在了关闭项目上 通过网上查阅资料 不断试探 我最终这样解决了 1 在设置中的自然语言中添加了中文 2 更新了Pycharm由2023 1到2023 4 3 在文件中关闭项目 然后等待了较长时间后
  • Sentinel分布式系统的流量防卫兵

    Sentinel 是什么 官网 https github com alibaba Sentinel wiki 介绍 随着微服务的流行 服务和服务之间的稳定性变得越来越重要 Sentinel 以流量为切入点 从流量控制 熔断降级 系统负载保护
  • ae2020不支持的视频驱动程序_AE 2020版本安装提示系统兼容性报告怎么解决?

    AE 2020版本安装提示系统兼容性报告怎么解决 很多设计师朋友会遇到这样的问题 安装完AE2020版本之后 打开软件 提示这样的信息显示系统兼容性报告可这样解决 快进来学习吧 系统是WIN10的 64位 点击不理会 可以打开软件 但是作为
  • ​LeetCode刷题实战26:删除排序数组中的重复项

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 删除排序数组中的重复项 我们先