删除排序数组的重复项

news2024/10/7 2:25:51

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

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 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。

你不需要考虑数组中超出新长度后面的元素。
题目解析:数组是有序的,意味着相同元素必须是连着的,java中数组没有删除方法,需要进行替换才能剔除重复元素。

思路:双指针法

慢指针指向当前有序无重复数组的最后一个元素,快指针遍历后边元素,将找到的无重复项赋值给slow指针维护

 

public static int deleteDuplicates(int[] nums){
        if(nums==null){
            return 0;
        }
       int  numSize= nums.length;
        if(numSize==0){
            return 0;
        }
        int slow=0;
        //快指针最多移动倒数第二个元素,fast+1<numSize
        for(int fast=0;fast<numSize-1;fast++){
            //两个挨着的元素不相等,将慢指针前移,并通过赋值替换重复元素
            if(nums[fast]!=nums[fast+1]){
                //slow永远指向有序不充复数组的最后一位
                slow++;
                nums[slow]=nums[fast+1];
                System.out.println(Arrays.toString(nums));
            }
        }
        //slow需要加1才表示长度否则是下标
        return slow+1;
    }

当题目更新为

使得每个元素最多出现两次

 

 

 

public static int twoDot(int[] nums){
        if(nums==null){
            return 0;
        }
        int  numSize= nums.length;
        if(numSize<=2){
            return numSize;
        }
        //将slow前一位与fast比较,不等就slow前移,然后将slow下标元素替换为fast下标元素
        int slow=1;
        for(int fast=2;fast<numSize;fast++){
            if(nums[fast]!=nums[slow-1]){
                slow++;
                nums[slow]=nums[fast];
            }
        }
        System.out.println(slow);
        return slow +1;
    }

 

 

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

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

相关文章

JavaEE进阶5/25(属性注入)

目录 1.更简单的存取Spring对象 2.获取Bean对象&#xff08;对象装配&#xff09;DI 3. Resource注入 4.Resource注入和Autowired注入的区别 1.更简单的存取Spring对象 2.获取Bean对象&#xff08;对象装配&#xff09;DI 对象装配&#xff08;对象注入&#xff09;有三种方…

含镍废水树脂吸附工艺方案

项目基本信息 工艺及产品信息 甲方 欣兴同泰科技(昆山)有限公司 采用工艺 沉淀工艺过滤系统离子交换放流池 工程公司 / 工艺原理 镍离子以氢氧化物的形式做成镍泥&#xff0c;清液中微量镍离子通过螯合离子交换原理实现出水稳定达标 开始时间 2019/6/20 工艺特点 …

遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

TortoiseGit的安装及使用, 并配合Gitee码云使用

Windows10下, TortoiseGit的安装及使用, 并配合Gitee码云使用! 1) 安装TortoiseGit 官网, 32位, 64位, 自选 Download – TortoiseGit – Windows Shell Interface to Git 2) 点击下载, 安装, 我选择的是64位, 中文安装包(说明: 中文安装包也分32, 64位), 这两个下载. Tips:…

在ubuntu上安装splint

lint lint是最著名的C语言工具之一&#xff0c;是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析&#xff0c;一般由UNIX系统提供。 工具介绍 与大多数C语言编译器相比&#xff0c;lint可以对程序进行更加广泛的错误分析&#xff0c;是一…

2023数博会 | 李雨航:新一代数据安全国际实践,CSA引领数据安全3.0时代

5月26-28日&#xff0c;2023中国国际大数据产业博览会&#xff08;简称&#xff1a;数博会&#xff09;在贵州贵阳举办。大会由国家发展和改革委员会、工业和信息化部、国家互联网信息办公室和贵州省人民政府共同主办&#xff0c;是全球首个以大数据为主题的博览会。今年数博会…

css 实现丰富的序号效果

<ol><li><p>日本新潟佐渡岛</p></li><li><p>宣告“飞岛萱草”</p><ol><li><p>迎来最佳观赏期。</p><ol><li><p>据观光协会介绍&#xff0c;</p></li><li><p&…

Linux内核驱动 --- CCF框架 provider驱动的编写

Provider驱动编写流程 复制上节内容中对Provider驱动编写流程的总结&#xff1a; 1&#xff09;分析硬件的clock tree&#xff0c;按照上面所描述的分类&#xff0c;将这些clock分类。 2&#xff09;将clock tree在DTS中描述出来&#xff0c;需要注意以下几2点&#xff1a; …

自定义集合和ES6集合

概念 集合是由一组无序且唯一的项组成的。 空集是指不含任何元素的集合。 说在前面 虽然es6已经有了Set类。但是我们还是希望自己来实现Set类。 原生的Set类参考我这篇博文&#xff1a; JS中数组如何去重&#xff08;ES6新增的Set集合类型&#xff09;经典two sum面试题ht…

C++进阶——哈希的实现

C进阶——哈希的实现 unordered系列关联式容器 在C11出现中有了重大更新就是添加了移动构造和unordered关联容器。在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到O( l o g 2 N log_2 N log2​N)&#xff0c;即最差情况下需要…

MYSQL高级之关联查询优化

建表 CREATE TABLE IF NOT EXISTS class ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED NOT NULL, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS book ( bookid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED NOT NULL, PRI…

vue router实现路由跳转方法

今天在学习 vue的过程中&#xff0c;看到了 vue的 router&#xff0c;用它来实现路由跳转&#xff0c;非常方便&#xff0c;于是就尝试了一下。效果还不错。 首先我们需要了解一个概念&#xff1a; Router。 Router是一个接口&#xff0c;它提供了一个接口让我们可以从一个地方…

Flutter 笔记 | Flutter 核心原理(二)关键类和启动流程

Widget、Element、BuildContext 和 RenderObject Widget Widget关键类及其子类继承关系如图所示&#xff1a; 其中&#xff0c;Widget是Widget Tree所有节点的基类。Widget的子类主要分为3类&#xff1a; 第1类是RenderObjectWidget的子类&#xff0c;具体来说又分为SingleCh…

08. 算法之递归算法

前言 递归&#xff0c;字面意思是递出去&#xff0c;拿回来&#xff0c;通过不断递过去&#xff0c;拿回来的过程&#xff0c;将每次调用结果保存起来&#xff0c;最后实现循环调用。递归在某些情况下会极大降低我们编程的复杂度。是软件开发工程师一定要掌握的技能。 1. 概念…

Linux—实操篇:vi和vim编辑器

1.vi和vim基本介绍 Linux系统会内置vi文本编辑器 vim具有程序编写的能力&#xff0c;可以看做是vi的增强版本&#xff0c;被程序员广泛使用 2、vi和vim常用的三种模式 2.1、正常模式 以vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中&#xff0c;你可…

溯源取证 - 流量分析 中等难度

使用工具&#xff1a; Brim 链接: https://www.brimdata.io/download/ Networkminer 链接: https://www.netresec.com/?pageNetworkMiner Wireshark Strings ida pro 知识点&#xff1a; 通过本篇文章&#xff0c;学习ssh协议特点、学习流量导出文件、学习简单的逆向分析、…

卫星定位北斗芯片AT6558一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片

1 芯片简介 AT6558R是一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片,片上集成射频前端&#xff0c; 数字基带处理器&#xff0c;32位的RISCCPU&#xff0c;电源管理功能。 芯片支持多种卫星导航系统&#xff0c;包括中国的北斗卫星导航系统BDS&#xff0c;美国的GPS,俄罗斯 的…

Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队

1 引言 大家好&#xff0c;接着上次和大家一起学习了《MySQL DDL执行方式-Online DDL介绍》&#xff0c;那么今天接着和大家一起学习另一种MySQL DDL执行方式之pt-soc。 在MySQL使用过程中&#xff0c;根据业务的需求对表结构进行变更是个普遍的运维操作&#xff0c;这些称为…

elasticsearch分词,排序,分页,高亮简单示例

目录 1. 创建ES实体2. 创建查询实体3. 查询方法实现3.1 总体代码3.2 构建查询条件3.2.1 关键词分词 3.3 高亮处理4.总体查询代码 记&#xff0c;写一个简单的es分词demo,es版本6.8.12 如果使用es7有些方法可能会有所改变&#xff0c;请参考7的文档 es安装教程&#xff1a;http:…

SUSE系统上安装HANA

一:安装SUSE操作系统 1.1 准备安装镜像 SLE-15-SP1-安装程序-DVD-x86_64-GM-DVD1 SLE-15-SP1-软件包-x86_64-GM-DVD1 SAP HANA安装文件 IMDB_SERVER20_032_0-80002031.SAR 1.2 引导系统 1.3 选择要安装的产品 SUSE Linux Enterprise Server for SAP Applications 15 SP…