当前位置: 首页 > news >正文

算法leetcode|80. 删除有序数组中的重复项 II(rust重拳出击)


文章目录

  • 80. 删除有序数组中的重复项 II:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


80. 删除有序数组中的重复项 II:

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

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

说明

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}

样例 1:

输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

样例 2:

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

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按升序排列

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 这道题和 26. 删除有序数组中的重复项 非常相似,不同的是,本题允许相同元素最多有一次重复。
  • 如果要删除重复,使用映射表等数据结构去计数是比较直观的想法,但是题目要求只能使用常数级别的额外空间,所以不能靠装备只能靠技巧了。
  • 题目中有一个非常重要的信息,那就是有序,这意味着相同的数字都会挨在一起,也就是最多允许当前下标和前一个下标的数字相同,判断当前下标和前面的前面的下标数字是否相同即可快速判断重复,即 nums[i]nums[i - 2] 相同时,就要删除该元素。
  • 由于要求是原地修改,所以我们需要一个新数组的长度(本身返回值也要求新数组的长度),还需要一个遍历下标,即双指针,只需要遍历一次,并且只需要常数级的额外空间,非常高效。
  • 另外如果数组元素少于3个(或者说数组长度小于/等于2个),是肯定满足题意的,可以直接返回,不需要做任何处理。

题解:

rust:

impl Solution {pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {let n = nums.len();if n <= 2 {return n as i32;}let (mut slow, mut fast) = (2, 2);while fast < n {if nums[slow - 2] != nums[fast] {nums[slow] = nums[fast];slow += 1;}fast += 1;}return slow as i32;}
}

go:

func removeDuplicates(nums []int) int {n := len(nums)if n <= 2 {return n}slow, fast := 2, 2for fast < n {if nums[slow-2] != nums[fast] {nums[slow] = nums[fast]slow++}fast++}return slow
}

c++:

class Solution {
public:int removeDuplicates(vector<int>& nums) {const int n = nums.size();if (n <= 2) {return n;}int slow = 2, fast = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}
};

python:

class Solution:def removeDuplicates(self, nums: List[int]) -> int:slow = 2for fast in range(2, len(nums)):if nums[fast] != nums[slow - 2]:nums[slow] = nums[fast]slow += 1return slow

java:

class Solution {public int removeDuplicates(int[] nums) {final int n = nums.length;if (n <= 2) {return n;}int slow = 2, fast = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}
}

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


相关文章:

算法leetcode|80. 删除有序数组中的重复项 II(rust重拳出击)

文章目录 80. 删除有序数组中的重复项 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 80. 删除有序数组中的重复项 II&#xff1a; …...

Vite 完整版详解

1. 打包构建&#xff1a; Vite 使用 Rollup 作为默认的构建工具。通过运行 npm run build 命令&#xff0c;Vite 会将应用程序的源代码打包成一个或多个优化的静态文件&#xff0c;以便在生产环境中进行部署。Vite 的构建过程会根据需要进行代码拆分、压缩和优化&#xff0c;以…...

AI入门指南:探索人工智能的基础原理和实际应用

引言 介绍AI的基本概念&#xff1a;什么是人工智能&#xff0c;为什么它如此重要。 引出博客的主要内容&#xff0c;即AI的基础原理和实际应用。 第一部分&#xff1a;AI的基础原理 什么是人工智能&#xff1a; 解释AI的定义和范畴。 介绍AI的历史和发展。 机器学习入门&#x…...

使用 Webpack 从 0 到 1 构建 Vue3 项目 + ts

使用 Webpack 从 0 到 1 构建 Vue3 项目 1.初始化项目结构2.安装 webpack&#xff0c;补充智能提示3.初步编写 webpack.config.js3.1设置入口文件及出口文件3.2 指定 html 模板位置 4.配置 运行/打包 命令&#xff0c;首次打包项目5.添加 Vue 及相关配置5.1安装并引入 vue5.2 补…...

【Git】Git 分支

Git 分支 1.分支简介 为了真正理解 Git 处理分支的方式&#xff0c;我们需要回顾一下 Git 是如何保存数据的。 或许你还记得 起步 的内容&#xff0c; Git 保存的不是文件的变化或者差异&#xff0c;而是一系列不同时刻的 快照 。 在进行提交操作时&#xff0c;Git 会保存一…...

.NET Upgrade Assistant 升级 .NET MAUI

.NET Upgrade Assistant 是一种可帮助您将应用程序升级到最新的 .NET版本 的工具&#xff0c;并且您可以使用这个工具将您的应用程序从旧平台&#xff08;例如 Xamarin Forms 和 UWP&#xff09;迁移到新的平台。此外&#xff0c;这个新版本的工具&#xff0c;可以让您在不更改…...

记一次诡异的Cannot find declaration to go to,Cannot resolve method

记一次诡异的 Cannot find declaration to go to&#xff0c; Cannot resolve method getOnExpressions in Join 对于项目中通常问题&#xff0c;清除缓存&#xff0c;重启idea&#xff0c;或者仔细检查语法通常都能解决问题&#xff0c;但是这次却失效了&#xff0c;以下是原…...

智慧园区:AI边缘计算技术与视频监控汇聚平台打造智慧园区解决方案

一、行业趋势与背景 智慧园区是现代城市发展的重要组成部分&#xff0c;通过智能化技术提高园区的运营效率、降低成本、增强环境可持续性等具有重要作用。在智慧园区中&#xff0c;人工智能和视频汇聚技术是重要的前置技术。人工智能技术可以实现对数据的智能化处理和分析&…...

SpringCloud(17~21章):Alibaba入门简介、Nacos服务注册和配置中心、Sentinel实现熔断与限流、Seata处理分布式事务

17 SpringCloud Alibaba入门简介 17.1 why会出现SpringCloud alibaba Spring Cloud Netflix项目进入维护模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now 说明 Spring Cloud Netflix Projects Entering Maintenance Mode 什么是维护模…...

Jmeter安装与测试

目录 一&#xff1a;JMeter简介&#xff1a; 二&#xff1a;JMeter安装与配置 三&#xff1a;JMeter主要原件 一&#xff1a;JMeter简介&#xff1a; JMeter&#xff0c;一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能 …...

java开发环境从0开始 【汇总版】

java开发环境从零开始 第一步&#xff1a;jdk第二步&#xff1a;安装 mysql第三步:安装maven第四步&#xff1a;idea最新免费安装第五步&#xff1a;安装navicate第六步 &#xff1a;安装git&#xff0c; 第一步&#xff1a;jdk 第一步当然是最先安装java开发环境啦。 看这个链…...

线性代数的本质(九)——二次型与合同

文章目录 二次型与合同二次型与标准型二次型的分类度量矩阵与合同 二次型与合同 二次型与标准型 Grant&#xff1a;二次型研究的是二次曲面在不同基下的坐标变换 由解析几何的知识&#xff0c;我们了解到二次函数的一次项和常数项只是对函数图像进行平移&#xff0c;并不会改变…...

STM32WB55开发(4)----配置串口打印Debug调试信息

STM32WB55开发----4.配置串口打印Debug调试信息 概述硬件准备视频教学样品申请选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙开启串口调试配置蓝牙参数设置工程信息工程文件设置Keil工程配置代码配置结果演示 概述…...

云原生服务无状态(Stateless)特性的实现

文章目录 为何要使用无状态服务&#xff1f;无状态服务的实现方法1. 会话状态外部化2. 负载均衡3. 自动伸缩4. 容器编排5. 数据存储6. 安全性 示例&#xff1a;使用Spring Boot实现无状态服务结论 &#x1f389;欢迎来到云计算技术应用专栏~云原生服务无状态&#xff08;Statel…...

zookeeper最基础教程

文章目录 一、简介1、工作机制2、特点3、数据结构4、应用场景5、选举机制 二、软件安装1、单机版安装2、集群安装3、配置参数解读(zoo.cfg)4、ZK集群启动脚本 三、命令行操作1、语法2、使用3、节点相关4、监听器原理5、节点删除与查看 三、写数据流程 一、简介 1、工作机制 官…...

又一重磅利好来袭!Zebec Payroll 集成至 Nautilus Chain 主网

流支付协议 Zebec Protocol 正在积极的拓展自身生态&#xff0c;随着此前其全新路线图的发布&#xff0c;揭示了该生态从 Web3 世界向 Web2 世界跨越的决心。根据其最新路线图&#xff0c;Zebec Protocol 正在从最初构建在 Solana 上的流支付协议&#xff0c;拓展为囊括模块化公…...

NLP模型的tokenize方法中return_tensors参数

NLP模型的tokenize方法中return_tensors参数 在许多NLP模型的tokenize方法中,return_tensors参数可以指定tokenize之后返回的张量类型,常见的可选值包括: ‘tf’: 返回TensorFlow的张量对象Tensor。 ‘pt’: 返回PyTorch的张量对象torch.Tensor。 ‘np’: 返回NumPy的ndarray对…...

模方新建工程时,显示空三与模型坐标系不一致怎么解决

答:检查空三xml与模型的metadata.xml的坐标系是否一致&#xff0c;metadata文件是否有在data目录外面。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.0新增单体化建模模块&#xff0c;…...

氧化锌避雷器绝缘电阻测试

氧化锌避雷器 绝缘电阻测试 试验目的 避雷器绝缘电阻包括本体绝缘电阻和底座绝缘电阻, 主要目的在于初步检查避雷 器内部是否受潮; 有并联电阻者可检查其通、 断、 接触和老化等情况。 试验设备 高压绝缘电阻测试仪 厂家&#xff1a; 湖北众拓高试 试验方法 本体绝缘电阻试验…...

链动2+1系统开发

什么是链动21模式&#xff1f; 链动21主要是一个集团队搭设、快速提升产品销量&#xff0c;与消费者做到合作共赢的一个商业模式&#xff0c;让用户在享受购物折扣的同时&#xff0c;也能获得相对收益&#xff0c;同时公司也能达到产品快速销售这样的一个目的&#xff0c;而链…...

AIGC(生成式AI)试用 4 -- 从模糊到精确

从模糊到精确&#xff0c;也许差异在于 更多的描述&#xff0c;更多的信息更具像的描述&#xff0c;更多的数据&#xff0c;更有效的信息主题明确和目标清晰层次感与条理性更简洁清晰的逻辑 “说清楚点&#xff0c;不太明白&#xff0c;提供更多的信息也许能知道要做什么。” …...

Linux中使用Docker安装ElasticSearch7.10.x集群

使用Docker安装ElasticSearch7.10.x单节点请访问这里 一、集群环境说明 服务器IP地址192.168.137.1&#xff0c;192.168.137.2&#xff0c;192.168.137.3 二、前期准备 1. 拉取镜像 docker pull elasticsearch:7.10.12. 首先需要创建一个用于生成秘钥的初始容器&#xff0…...

electron 左上角图标 dev(开发环境)可显示 build(打包)后无法显示

先说解决方法&#xff0c;用于作为图标的ico文件需要富集多种尺寸&#xff0c;必须包含256*256&#xff0c;且同时应当包含其他更小的尺寸。 例如&#xff1a; 接下来解释一下这么做的原因 ico是Iconfile的缩写&#xff0c;是Windows计算机中的一种图标文件格式&#xff0c;…...

全球与中国BGO晶体市场:增长趋势、竞争格局与前景展望

BGO晶体&#xff0c;全名为Bismuth Germanate Scintillation Crystal&#xff08;铋锗酸盐闪烁晶体&#xff09;&#xff0c;是一种用于探测放射性粒子和射线的闪烁晶体材料。它的主要成分是铋氧化物&#xff08;Bi4Ge3O12&#xff09;&#xff0c;其中铋和锗的特性使得这种晶体…...

华三路由交换技术基础——计算机网络基础

计算机网络&#xff1a; 定义&#xff1a;一组具有自治权的计算机互联的集合 作用&#xff1a; 1.共享信息资源 2.分解式处理信息 4.负载均衡 5.综合信息服务 它是计算机技术与通信技术的两个领域的结合 一&#xff0c;计算机网络中的基本概念&#xff1a; 局域网&#xff…...

Docker搭建RK3568开发环境

推荐&#xff1a;Ubuntu 20.04 版本 Docker加速 # 编辑 Docker 配置文件 $ sudo vim /etc/docker/daemon.json# 加入以下配置项 {"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidu…...

【GAMES202】Real-Time Ray Tracing 1—实时光线追踪1

一、前言 这篇我们开始新的话题—Real-Time Ray Tracing简称RTRT&#xff0c;也就是实时光线追踪&#xff0c;关于光线追踪&#xff0c;我们已经不止一次提到过它的优点&#xff0c;无论是软阴影还是全局光照&#xff0c;光线追踪都很容易做&#xff0c;唯一的缺点就是速度太慢…...

Linux修复损坏的文件系统

如何判断文件系统是否损坏 当文件系统受损时&#xff0c;将会出现一些明显的迹象。例如&#xff0c;文件或文件夹无法访问、文件大小异常、系统启动慢或无法启动等。此外&#xff0c;系统也可能发出一些错误信息&#xff0c;如"Input/output error"、"Filesyst…...

三分钟学会一个新技能——使用Java操作Redis

目录 1、前置准备操作 1.1、为什么要进行前置准备操作 1.2、本地如何访问到云服务上Redis的6379端口号 1.3、配置步骤&#xff1a; 2、配置后本地主机如何操作 3、常用命令举例 3.1、通用命令举例 3.2、string相关命令举例 3.3、hash相关命令举例 3.4、list相关命令…...

Java学习笔记------内部类

内部类的定义&#xff1a; 在一个类的里面再定义一个类 内部类的使用场景&#xff1a; 内部类表示的事物是外部类的一部分&#xff08;B类表示的事物是A类的一部分&#xff0c;且B单独存在没有意义&#xff09;内部类单独出现没有任何意义 内部类的访问特点 内部类可以直接…...

电子商务网站后台模板/灰色seo关键词排名

声明&#xff1a; 仅个人小记 前言&#xff1a; 主要是引入一个新的看待矩阵乘法的角度觉得这个挺重要的&#xff0c;故做记录 列向量角度&#xff0c;矩阵左乘 AB C 结合上图&#xff0c;我们可以知道&#xff0c;结果矩阵C中的第 j 列完全可以表示为矩阵A中列向量的线性组合…...

郑州做品牌网站好的公司/如何创建自己的网站平台

一、概述 本文主要讲解的是 CGLIB 的常用 API 及其使用方式。使用的 CGLIB 依赖如下所示&#xff1a; <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version> </dependency>首先创建…...

adobe dreamweaver建设网站/竞价推广哪里开户

CSS思维导图...

网站建设刂金手指下拉十五/百度首页优化

767. 重构字符串(贪心&#xff0c;计数&#xff09; 题目描述&#xff1a; 给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 若可行&#xff0c;输出任意可行的结果。若不可行&#xff0c;返回空字符串。示例一&#xff1a; 输入…...

运营外包/廊坊百度seo公司

注解&#xff08;简单解释&#xff09; 1、代码里面特殊标记&#xff0c;使用注解可以完成一定的功能 2、注解写法 注解名称&#xff08;属性名称属性值&#xff09; 3、注解使用在类上面&#xff0c;方法上面和属性上面 注意&#xff1a;注解方式不能完全替代配置文件方式 Spr…...

博客网站做外贸可以吗/seo快速优化软件网站

部署前端之前&#xff0c;开发者通常会对代码进行打包压缩&#xff0c;这样可以减少代码大小&#xff0c;从而有效提高访问速度。然而&#xff0c;压缩代码的报错信息是很难Debug的&#xff0c;因为它的行号和列号已经失真。这时就需要Source Map来还原真实的出错位置了。 为啥…...