在数组中删除重复数字(详解)

news2024/12/23 12:04:08

前言:本期是关于删除重复数字的详解,今天你c了吗?

方法: 双指针

 以一组数:3 4 1 0 0 2 3 1 1 2 为例删除重复的数字

step 1:排序

 使用双下标法的前提是数组有序(降序or升序)

 可以使用:冒泡排序(我的另一篇博客有详解,点击即跳转)排成升序数组or降序数组

step 2:i,j双下标:开始都指向第二个元素

这里是升序排列:

下标j:负责遍历数组的每一个元素,初始化为1

下标i:负责记录每一个要被存放不是重复数字的空间位置,初始化为1

由于数组经过排序后已经是有序的,故而数组的第一个元素一定不是重复数字,因为它是第一个出现的,故而我们要排查删除的范围(即遍历的范围)从第二个元素(下标为1)开始

删除重复数字的思路:

1. 拿当前元素和前一个元素进行比较:

    若是二者值不同,则表示当前数字不是重复数字,需要存入i作为下标的空间内

    若是二者值相同,则表示当前数字是重复数字,重复数字不会被放进i作为下标的空间内

    下标j就需要往后走找到下一个元素,判断下一个元素是否为重复数字(与它的前一个元素比)

2. 图示理解:

     step1:

第二个元素0与前一个元素0的值相同,故而第二个元素0是重复数字,无需存入i作为下标的空间,故而i不动,需要j++,走向下一个元素进行下一轮比较

step2:

 

当前元素1与前一个元素0值不同,表示当前元素不是重复数字,需要存入i作为下标的空间中

存入后,i++,指向下一个需要被存放非重复数字的空间,j++,走向下一个需要判断的数字

step3:

当前元素1与前一个元素1的值相同:当前元素是重复数字,无需存入i作为下标的空间,故而i不动,需要j++,走向下一个元素进行下一轮比较

step4:

当前元素1与前一个元素1的值相同:当前元素是重复数字,无需存入i作为下标的空间,故而i不动,需要j++,走向下一个元素进行下一轮比较

step5:当前元素2与前一个元素1的值不同:不是重复数字 ,需要存入i作为下标的空间中

存入后,i++,指向下一个需要被存放非重复数字的空间,j++,走向下一个需要判断的数字

step6:

当前元素2与前一个元素2的值相同:当前元素是重复数字,无需存入i作为下标的空间,故而i不动,需要j++,走向下一个元素进行下一轮比较

step7:

当前元素3与前一个元素2的值不同:不是重复数字 ,需要存入i作为下标的空间中

存入后,i++,指向下一个需要被存放非重复数字的空间,j++,走向下一个需要判断的数字

step8:

 当前元素3与前一个元素3的值相同:当前元素是重复数字,无需存入i作为下标的空间,故而i不动,需要j++,走向下一个元素进行下一轮比较

step9:

当前元素4与前一个元素3的值不同:不是重复数字 ,需要存入i作为下标的空间中

存入后,i++,指向下一个需要被存放非重复数字的空间,j++,走向下一个需要判断的数字

step10:

此时所有的非重复数字已经全部存入i作为下标的空间中,i最后的值就是这些非重复数字的个数 

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

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

相关文章

MYSQL命令总结

一.库的操作 1.创建库 create database db1;//创建名为db1的数据库 create database db2 charsetutf8;//创建一个utf8字符集的db2数据库 create database db3 charsetutf8 collate utf8_general_ci;//创建一个使用utf字符集并带校对规则的db3数据库2.字符集和校验规则 show …

[redis+springboot]缓存sql执行结果

场景: 访问controller层(其实是service),需要将其结果缓存到redis,下一次直接从缓存找值,从而减少sql操作,减轻数据库压力技术: redis,springboot,jpa,mysql1, 新建项目2, 导入依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…

懂了委托,才算真正入门C#

文章目录委托的概念多播委托拖动按钮前文提要&#xff1a;超快速成&#xff0c;零基础掌握C#开发中最重要的概念抽丝剥茧&#xff0c;C#面向对象快速上手Winform&#xff0c;最友好的桌面GUI框架 委托的概念 委托这个名字取的神乎其神的&#xff0c;但实质是函数式编程&#…

网络攻防技术--第五次作业

文章目录作业五一、 什么是恶意代码&#xff1f;恶意代码主要类型有哪些&#xff1f;二、 恶意代码的基本技术主要包括哪几种&#xff1f;三、 什么是特洛伊木马&#xff1f;有什么特点&#xff1f;四、 什么是计算机病毒&#xff1f;其有哪几个基本组成部分&#xff1f;五、 什…

项目管理工具能做什么 它给企业带来哪些作用

一个项目经理&#xff0c;如果要想管理好项目&#xff0c;那么一定要掌握项目管理的方法与工具。在项目管理过程中总会借助一些工具来掌控项目点点滴滴&#xff0c;这不仅可以提高团队的生产力和效率&#xff0c;还可以让项目组织在不同项目带来的影响变化中做好准备。 项目管…

每天一道大厂SQL题【Day03】订单量统计

每天一道大厂SQL题【Day03】订单量统计 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#xff0c…

SAP 自定义SQL编辑器

导语&#xff1a;自定义SQL编辑器&#xff0c;可使用SAP ABAP的OPEN SQL语法进行编辑&#xff0c;快速出具简单报表&#xff0c;基本具备与SAP中DB02相似的功能。 此资源其中有两个版本&#xff0c;一个版本是网上的代码资料&#xff0c;另一个版本是本人优化过后的&#xff0…

Gerrit3.4.1安装使用

环境依赖jdk11 安装jdk11&#xff1a; 下载&#xff1a; wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz解压&#xff1a; tar zxvf openjdk-1128_linux-x64_bin.tar.gzsudo update-alternatives --install /usr/bin/java java /home/je…

Fiddler抓包工具配置+Jmeter基本使用

目录 一、Fiddler抓包工具的配置和使用 局域网络配置# Fiddler配置# Fiddler抓包实例# 二、Jmeter的基本使用 Jmeter的安装配置# 第一个Jmeter脚本# 一、Fiddler抓包工具的配置和使用 在编写网关自动化脚本之前&#xff0c;得先学会如何抓包&#xff0c;这里以Fiddler为…

Docker容器及安装 01

前言 1.1 从环境配置说起 环境配置是软件开发的一大难题。开发、测试及运维人员需要相同的代码运行环境&#xff0c;如此一来就需要多次搭建环境&#xff0c;想想就觉得麻烦&#xff0c;实际上&#xff0c;在不了解docker等容器技术以前&#xff0c;还真就是这么干的&#xff…

2023年FOF/MOM基金研究报告

第一章 概况 FOF 是 Fund of Funds 的简称&#xff0c;即“基金中的基金”&#xff0c;是一种专门投资于其他投资基金的基金。FOF 并不直接投资股票或债券&#xff0c;其投资范围主要限于其他基金。按照募集方式&#xff0c;FOF 分为公募 FOF 和私募 FOF。 公募 FOF 是指将80…

python小游戏——飞机大战代码开源

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿所有的美好&#…

明细打印重影方案

一、问题描述生产上出现明细查询打印业务&#xff0c;部分客户打印数据时出现数据重叠现象&#xff0c;不利于客户使用&#xff0c;影响客户体验。二、问题原因对方户名公司名称字段目前没有限制&#xff0c;按照现有的分页处理机制&#xff0c;如果一页纸出现多个公司名称较长…

python中值传递、引用传递、global关键字

结论1、函数中&#xff0c;数值、字符、元组的传递是值传递 b 5 print(id b ,id(b))def change(b):print(\n)#print(在函数change中 修改前 id b ,id(b))b 0print(在函数change中 修改后 id b ,id(b))def print_b():print(\n)print(在函数print b中 b , b)print(在函数pri…

【C++修炼之路】C++入门(下)

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录一、前言二、内联函数1、概念2、特性三、auto&#xff08;C 11)1、概念2、价值3、三个不能四、范围for循环(C11)1、基本使用2、使…

MySQL基础(3)—— MySQL数据类型

文章目录数值类型1、整数类型2、浮点数类型3、定点数类型日期和时间类型1、YEAR2、DATE、TIME、DATETIME3、TIMESTAMP字符串类型1、CHAR(M)2、VARCHAR(M)3、各种 TEXT 类型4、ENUM 类型和 SET 类型二进制类型1、BIT 类型2、BINARY(M) 与 VARBINARY(M)3、BLOB 类型MySQL说到底就…

移动出行2023:聊以新颜待今朝

兔年春节期间&#xff0c;城市再现浓浓烟火气。预订全满的年夜饭、排不到号的奶茶店以及火爆的电影票房等&#xff0c;证明着“吃、游、购、娱”等需求集中释放的“威力”。根据国家税务总局发布的最新数据&#xff0c;今年春节假期&#xff0c;全国消费相关行业销售收入与上年…

最长上升子序列问题(LIS问题)与最长不上升子序列问题的四种方法(c++ 模板代码)

文章目录动态规划树状数组线段树二分查找最大上升子序列问题也叫做LIS问题&#xff0c;与最大公共子序列LCS问题是一类经典问题&#xff0c;在本章我们将总结一下求解LIS最大上升子序列的几种方法&#xff0c;同时也会给出对应的最大不上升子序列的求解方法。 关于LCS问题&…

【表格单元格可编辑】vue-elementul简单实现table表格点击单元格可编辑,点击单元格变成输入框修改数据

前言 这是最近遇到的功能&#xff0c;经常会需要一个表格可以编辑数据 类似于excel那种点击一下单元格就可以编辑数据&#xff0c;修改后鼠标移动出去 光标消失就会保存数据给后台 这里记录一下实现方法&#xff0c;其实也比较简单 就是通过角标来判断显示隐藏的 效果图 代码…

[Android开发基础4] 点击事件的响应与处理

文章目录 方法一&#xff1a;控件的onClick属性 方法二&#xff1a;内部类 方法一&#xff1a;控件的onClick属性 利用控件自带的onClick属性&#xff0c;指定事件处理函数名称即可实现控件点击事件的处理 这里有个小技巧就是当设置完控件的onClick属性后&#xff0c;它会报没…