[ LeetCode ] 题刷刷(Python)-第26题:删除有序数组中的重复项

题目描述

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

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

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

示例

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [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]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

解题

解法一: 双指针法

思路

要求原地修改数组,那么我们从第二个元素开始遍历进行处理,就先假设第一个元素为不重复元素啦,人家是第一耶。所以它就是新数组的第一个元素。

在遍历过程中,判断当前的原数组元素是否和新数组的最新元素相等,若不同,则将其填入新数组的下一个位置(索引为j+1)并将j递增1。

nums这个数组是有序的,所以重复的元素是相邻的。后面处理的原数组元素不可能会和新数组的非最新元素重复,只可能和新数组的最新元素重复。

算法复杂度

时间复杂度:O(n),其中n为nums的长度。


空间复杂度:O(1)。

代码

class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0j = 0  # 记录新数组的下标,原来数组的第一个元素不用处理for i in range(1, len(nums)):# 如果原数组当前元素和新数组最新元素不同if nums[i] != nums[j]:j += 1   # 新数组的下一个位置下标nums[j] = nums[i] # 将原数组中新的不同元素放入新数组的下一个位置return j + 1  # 返回新数组的长度(下标从0开始,所以长度=最后的下标+1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业电脑在ESOP工作站行业应用

ESOP工作站行业应用 项目背景 E-SOP是实现作业指导书电子化,并统一管理和集中控制的一套管理信息平台。信迈科技的ESOP终端是一款体积小巧功能齐全的高性价比工业电脑,上层通过网络与MES系统连接,下层连接显示器展示作业指导书。ESOP控制终…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.5版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、小程序、Uniapp、标准Java平台,服务端基于Netty编写。 工…

MAC 终端命令

Command Shift . 显示隐藏文件夹 环境变量路径 ~/.zshrc ~/.bash_profile 每次打开都需要 source 安装Homebrew xcode安装 xcode-select --install brew安装 /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)” 检查是否…

朗思-我的家园正式上线:朗思科技Agent工具软件--人人拥有“Ai-机器人”

4月16日,朗思科技正式发布"朗思-我的家园"。朗思科技是国内领先的Ai Agent智能自动化工具软件产品及方案的提供商,始终坚持自主研发,全面支持国产信创,不断加快产品创新迭代。基于技术领先性和战略前瞻性,其…

【小白学机器学习13】一文理解假设检验的反证法,H0如何设计的,什么时候用左侧检验和右侧检验,等各种关于假设检验的基础知识

目录 前言: 目标 1 什么叫 假设检验 1.1 假设检验的定义 1.1.1 来自百度百科 1.1.2 维基百科 1.2 假设检验的最底层逻辑:是反证法思想 1.3 假设检验的底层构造:小概率反证法思想 2 什么叫反证法 2.1 反证法的概念 2.1.1 来自百度…

ES解构的使用

文章目录 1 概念2 数组解构3 对象结构 1 概念 解构是ES6中引入的一个新语法特性,它是一种按照一定模式从数组或对象中提取值,对变量进行赋值的行为。解构可以被视为一种结构化赋值方法,用于简化从数据结构(如数组或对象&#xff…

MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中,通过鼠标操作获取坐标并在CPictureCtrl控件中使用Lin…

【软件测试】单元测试+集成测试+系统测试

以下是来自“文心一言”搜索的回答 单元测试 单元测试是软件开发中的一种测试方法,用于对软件中的最小可测试单元进行测试。这些最小单元通常是函数、方法或类等代码片段。单元测试的目的是验证每个单元的代码是否按预期工作,确保其功能正确&#xff0…

极化码的编码

引言 极化码是一种比较特殊的线性分组码,同时其还是一种信道专属编码,在极化码的编码构造方案中,每种不同的信道都有属于自己特定的编码构造方式,而当给定一种具体的信道环境时,极化码的构造方案还是与其他的线性分组码比较的类似,极化码的编码码字也是通过信息序列乘以生…

05 MySQL 之 表的约束、视图、事务

1. CONSTRAINT 约束 创建表时,可以给表的字段添加约束,可以保证数据的完整性、有效性。比如大家上网注册用户时常见的:用户名不能为空。对不起,用户名已存在。等提示信息。 约束包括: 非空约束:not null检…

通过Idea部署Tomcat服务器

1.在idea中创建项目 有maven构建工具就创建maven,没有就正常创建一个普通的java程序 创建普通java项目 2.添加框架 3.配置 Tomcat 注意:创建web项目后我们需要配置tomcat才能运行,下面我们来进行配置。 4.添加部署 回到服务器 5.完善配置 6…

小程序如何优化搜索排名,获取曝光

在移动互联网时代,小程序以其便捷、轻量级的特点,逐渐成为用户获取服务的重要渠道。然而,小程序数量众多,如何让自己的小程序在搜索中脱颖而出,获取更多的曝光和流量,成为众多开发者关注的焦点。 一、理解…

DC-8渗透测试复现

DC-8渗透测试复现 目的: 获取最高权限以及flag 过程: 信息打点--sql注入- 命令执行反弹shell-exim4提权 环境: 攻击机:kali(192.168.85.137) 靶机:DC_3(192.168.85.140) 复现: 一.信息收集 nmap -…

Golang:三种引号详解-单引号、双引号、反引号

Golang限定字符或者字符串一共三种引号: 单引号(),单个字符,更类似于C语言中的char类型, 双引号("") ,字符串,单行的,多个字符(字母数字)。 反引…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET,是一款基于fastreport报表开发控件的商业图形库,借助 FastReport 商业图形库,您可以可视化不同的分层数据,构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

栈和队列——数据结构学习笔记

栈和队列 栈(Stack) 定义与特点 栈是一种特殊的线性表,只能从一端进行插入和删除——>后进后出 LIFO结构 表尾(an) 称为栈顶Top 表头(a1)称为栈底Base 插入元素到栈顶的操作称为入栈 删除栈顶最后一个元素的操作称为出栈 抽象类型定义 ADT Stack{ 数据对…

编译OpenWRT固件

前言 编译环境,我是使用Ubuntu16.04.07 LTS 64位版 1.安装Ubuntu16.04.07 LTS 64 Ubuntu16.04.07 LTS 64安装的时候会出现一个bug,如果开始安装界面选了中文之后就会出现 提示错误信息:无法安装busybox-initramfs,向目标系统中…

openlayers 入门教程(六):controls 篇

目录 一、常用的控件 二、使用控件方法 三、添加删除control 的基本方法 四、control示例 1 比例尺 - ScaleLine 2 鹰眼/缩小图 - OverviewMap 3 全屏 - FullScreen 4 版权信息 - Attribution 5 旋转地图 - Rotate 6 放大缩小 - Zoom 7 缩放滑块控件 - ZoomSlider …

【Day 1】HTML 与 CSS

1 前端 网站的工作流程: 首先我们需要通过浏览器访问发布到前端服务器中的前端程序,这时候前端程序会将前端代码返回给浏览器浏览器得到前端代码,此时浏览器会将前端代码进行解析,然后展示到浏览器的窗口中,这时候我…

pwn - 零基础ROP之Android ARM 32位篇(新修订)

一、环境搭建 安装ndk r10e,必须得这个版本,其他版本可能导致 -fno-stack-protector 不生效! r10e Darwin: https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zipLinux: https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_6…