26. 删除有序数组中的重复项

news2024/9/23 19:22:29

文章目录

  • 题目描述
  • 方法一 双指针-while
  • 方法二 双指针-for

题目描述

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

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

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

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

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = […]; // 输入数组
int[] expectedNums = […]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
如果所有断言都通过,那么您的题解将被 通过。

示例 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 。不需要考虑数组中超出新长度后面的元素。

提示:

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

方法一 双指针-while

值得一说的是这个题目描述不是很清楚,其实一开始说了是返回最终的数组长的,可是题目中给的两个示例有很强的误导性,我还以为是先输出长度,然后再输出数组呢.
这个方法主要是设置一个慢指针low,然后快指针fast往前跑,如果后一个与前一个不相等,回到初始low+1位置覆盖,这里得记得自己画图演示一下就明白了.
在这里插入图片描述

class Solution {
    public int removeDuplicates(int[] nums) {
        int len=nums.length;
        if(len<=1){
            return len;
        }
        int low=1;
        int fast=1;
        while(fast<len){
            if(nums[fast]!=nums[fast-1]){
                nums[low]=nums[fast];
                low++;
            }
            fast++;
        }
        return low;

    }
}

方法二 双指针-for

这里其实和上一种方法一样,只是为了加深印象而已.
在这里插入图片描述

class Solution {
    public int removeDuplicates(int[] nums) {
        int len=nums.length;
        if(len<=1){
            return len;
        }
        int low=1;
        for(int fast=1;fast<len;fast++){
            if(nums[fast]!=nums[fast-1]){
                nums[low]=nums[fast];
                low++;
            }
        }
        return low;

    }
}

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

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

相关文章

数字图像处理---空间滤波基础

空间滤波概念 滤波&#xff1a;通过修改或者抑制给定图像的特定频率分量&#xff0c;常见有低通滤波器与高通滤波器。空间滤波&#xff1a;将像素值使用该像素值及其邻域的值进行替换&#xff0c;替换方式有线性与非线性两种&#xff0c;即线性滤波器与非线性滤波器。 线性滤…

VScode快速配置C/C++环境

文章目录我安装时仅参考了这两篇分享1.下载并安装VScode 商店C/C插件2.下载MinGW-W64 x86_64-win32-seh3.配置各种.json5.Hello_world.cpp测试我安装时仅参考了这两篇分享 伸手党进&#xff1a;具体步骤主要是这篇&#xff1a;Hudiscount-Vscode配置C/C环境 MinGW-W64 x86_64-…

华为数通--NAT、ACL、IPSec

NAT\ACL\IPSEC VPNNAT1.1静态NAT转换1.2NAT服务器1.3动态NAT1.4easy IPACL高级ACLIPSEC VPN配置IPSec V-P-N&#xff1a;.1 加解密点.2 IPSEC的SPD&#xff08;ACL&#xff09;、提议&#xff08;protocol&#xff09;和IPSEC 策略NAT(网络地址转换&#xff09; 1.1静态NAT转换…

设计模式 (一) 单例模式 Java

目录 一、饿汉式单例模式 二、懒汉式单例模式 三、最完美的单例模式写法 单例模式一般分为饿汉式与懒汉式&#xff08;类似于懒加载&#xff09;。饿汉式会在类加载时即刻创建实例对象&#xff0c;线程安全&#xff1b;懒汉式由于是在调用时才创建&#xff0c;所以需要考虑线…

vue3中的v-for

一.列表渲染v-for 真实开发中&#xff0c;往往会从服务器中拿到一组数据&#xff0c;并且需要对其进行渲染&#xff0c;这个时候可以使用v-for完成。 1.v-for的基本使用 1&#xff09;基本格式&#xff1a;“item in 数组” 数组通常是来自data或者prop&#xff0c;也可以是…

Swift(2)

因为要在31号之前用swift写一个系统&#xff0c;我不得不把我的电脑系统更新了一下&#xff0c;之后便下载了这个&#xff0c; 做了一些简单的测试&#xff0c;部分软件还是可以打开的。 这个软件用着的确比那个网站用着要舒服很多。 目录 问号 感叹号 ​编辑if else ​编…

Ubuntu18.04下linuxdeployqt下载安装

开发环境&#xff1a;Ubuntu18.04QT5.14.2 使用需求&#xff1a;使用QT开发完成后的项目需要使用linuxdeployqt工具打包生成相关文件 下载安装&#xff1a; 1.使用火狐浏览器打开linuxdeployqt下载地址&#xff1a; https://github.com/probonopd/linuxdeployqt/releases h…

Diffusion Models, CLIP与 DALLE 的学习与感悟

整合了一下关于Diffusion Models, CLIP与 DALLE 的介绍&#xff0c;应用&#xff0c;以及后续的拓展路线。 (Generative) Diffusion Models 还是先横向对一下最近比较火的几个生成模型 GAN、VAE、Flow-based Models、Diffusion Models。 在这里&#xff0c;可以将Diffusion…

SAP FICO 批量成本估算

批量成本估算 【前言】 单个物料的成本估算我们使用事务代码CK11N&#xff0c;标记/发布使用事务代码CK24&#xff0c;那么若有大批量新建的物料需要做成本估算&#xff0c;怎么办&#xff1f; 这里首先需要检查“成本核算变式”。 后台路径&#xff1a;SPRO→控制→产品成…

SpringBoot+Vue项目图书个性化推荐系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

Java设计模式-观察者模式Observer

介绍 观察者模式是行为设计模式之一。当您对对象的状态感兴趣并希望在任何更改时得到通知时&#xff0c;观察者设计模式非常有用。在观察者模式中&#xff0c;观察另一个对象状态的对象被称为观察者&#xff0c;而被观察的对象则被称为主体。 优点 观察者模式设计后&#xff0…

手撕RTSP协议中 从零开始学习RTSP协议 持续更新中....

RTSP协议在安防监控 摄像头有着广泛的运用 &#xff0c;基本上只要是做摄像头 是必须支持的协议。 我个人理解 RTSP基本上算是一个局域网的协议&#xff0c;广域网不太适合因为rtsp传输的视频码率 分辨率 都是比较高的 所有注定了他只适合局域网不适合互联网。 下午就要回家…

Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(二) || 后台及接口完结篇

文章目录Node.jsVue.js全栈开发王者荣耀手机端官网和管理后台(二)通用CRUD接口装备&#xff08;物品&#xff09;管理图片上传英雄管理英雄编辑【模型字段】英雄编辑【编辑表单】技能编辑【UI】技能编辑【交互】文章管理富文本编辑器&#xff08;quill&#xff09;富文本编辑器…

23种设计模式(八)——工厂方法模式【对象创建】

文章目录 意图什么时候使用工厂方法真实世界类比工厂方法模式的实现工厂方法模式的优缺点亦称: 虚拟构造函数、Virtual Constructor、Factory Method 意图 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将…

大数据-hadoop-MapReduce原理详解

MapReduce[1]是Google提出的一个软件架构&#xff0c;用于大规模数据集的并行运算。概念“Map&#xff08;映射&#xff09;”和“Reduce&#xff08;归约&#xff09;”&#xff0c;及他们的主要思想&#xff0c;都是从函数式编程语言借鉴的&#xff0c;还有从矢量编程语言借来…

【基于crul库编写源码实现上传文件到http服务器】

基于crul库编写源码实现上传文件到http服务器编译crul库(可以去我下载资源里面找)用postman生成代码postman生成的代码对应的http服务器的设置_msnap_send_to_httpserver函数有http通过json发送jpeg文件、以及上传ftp服务器、发邮件的实例编译crul库(可以去我下载资源里面找) …

MySQL数据库及数据表相关操作

一,前言1.典型数据库数据库圈子中典型代表:MySQLOracleSQL Server&#xff08;一般在学校学习的时候用到的是这个数据库&#xff09;Oracle是世界上公认的最好的数据库,但是我们现在所学习以及以后上班中大部分时候用到的数据库是MySQL,因为MySQL是开源免费的(任何人都可以阅读…

86.编码器-解码器架构以及代码实现

1. 重新考察CNN 2. 重新考察RNN 3. 编码器-解码器架构 4. 总结 使用编码器-解码器架构的模型&#xff0c;编码器负责表示输入&#xff0c;解码器负责输出 5. 代码实现 5.1 编码器 在编码器接口中&#xff0c;我们只指定长度可变的序列作为编码器的输入X。 任何继承这个Enco…

数据结构 - 学习笔记 - 红黑树前传——234树

数据结构 - 学习笔记 - 红黑树前传——234树简介结点类型与红黑树对应关系插入逻辑插入步骤演示2结点插入3结点插入&#xff08;红黑树旋转&#xff09;共对应6种红黑树情形有4种情形需要再平衡4结点插入&#xff08;红黑树变色&#xff09;234树转红黑树触发分裂有4种情形需要…

234. 回文链表

1、题目描述 额外要求&#xff1a;你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题&#xff1f; 2、题解 2.1 解题思路1 使用额外的栈空间&#xff0c;先将链表中所有的元素依次压入栈中&#xff0c;得到链表的逆序&#xff0c;然后将栈中的元素依次弹出和链表中的元素从…