找出重复的数java_剑指offer:1.找出数组中重复的数(java版)

本文介绍了一种找出数组中重复数字的方法。在一个长度为n的数组里,所有数字都在0到n-1的范围内。通过重新排序和扫描,或使用HashMap来高效地找出重复的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组中重复的数:

题目:找出数组中重复的数,

题目描述:

在一个长度为n的数组里的所有数字都在0到n-1的范围内。

数组中某些数字是重复的,但不知道有几个数字是重复的。

也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

例如,如果输入长度为7的数组{2,3,1,0,2,5,3},

那么对应的输出是重复的数字2或者3。

分析:

首先进行重新排序

然后从头进行扫描即可。

1.比较下标,如果下标index等于数组num[index]继续比较下一个

如果不等于:将index与num[index]比较:如果相等则这个数是重复的;如果不相等,

将index与num[index]交换,然后继续比较.....

如:[2,3,1,0,2,5,3]---->[1,3,2,0,2,5]----->[3,1,2,0,2,5,3]

------>[0,1,2,3,2,5]到扫到2时由于下标4与数值2不一致,再比较

2与下标为2中的数发现相等,即可以得到重复的数;

409c995364ee752996bbfafd01a3c68a.png

运行结果如下:

fa0ac63244edf23e87ddc8f3be77ec13.png

当然这个题也可以用hashmap解决:

遍历数组,采用hashmap存放每个元素,其中元素作为key存储,value为0。

当前遍历元素插入hashmap时,先检查hashmap中是否已经存在同样的key。

若存在,记录下该值,返回true;若不存在,存入map中,继续遍历,直到数组结束,返回false.、

如果要求不修改数组找出重复的数:

按照二分查找的思路,将1-n分成两半,假如将1-n分成1-m和m+1到n。如果1~m中的数字的数目超过m,那就说明有重复数字;

否则,另一半中一定有重复的数字。我们可以继续把包含重复数字的区间继续二分,直到找到一个重复的数字。

【Java】 剑指offer(1) 找出数组中重复的数字

本文参考自一书,代码采用Java语言. 更多:Java实现合集 题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字 ...

剑指Offer:找出数组中出现次数超过一半的元素

题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include int ha ...

【剑指offer】找出数组中任意重复的数字(不修改数组),C++实现

原创博文,转载请注明出处! # 题目 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改输入的数组.例如,如果输入长度 ...

【剑指offer】找出数组中任意一个重复的数字,C++实现

原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...

【剑指offer】找出数组中出现一次的两个数

2013-09-08 10:50:46 一个整型数组中,除了两个数字之外,其他数字都出现了2次,找出这两个只出现一次的数字,要求时间复杂度是O(N),空间复杂度是O(1). 小结: 任何数与0异或,结 ...

【剑指Offer】50、数组中重复的数字

题目描述:   在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果 ...

剑指offer(50)数组中重复的数字

题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

剑指offer五十之数组中重复的数字

一.题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

剑指offer28:找出数组中超过一半的数字。

1 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出 ...

随机推荐

系统配置文件的加载设置-以xml文件为例

前言:开发中经常会遇到加载一些配置文件信息,这些信息变化的概率很小,不需要实时的更新.这样的信息放在数据库里自然是不合适的,所以最好的办法是写在配置文件中,在程序第一次运行的时候加载到内存,以后用到的 ...

YARN :Architecture

Apache Hadoop NextGen MapReduce (YARN) MapReduce has undergone a complete overhaul in hadoop-0.23 an ...

Java Bean validation specification...

http://www.ibm.com/developerworks/cn/java/j-lo-beanvalid/index.html

0119——UIImageView的一些属性 和 简单动画实现

1.contentMode view.contentMode = UIViewContentModeScaleAspectFill; 2.是否实现触摸 3.简单实现动画 图片的名字为campFire0 ...

IDA strings view 中文字符的显示

具体原理不清楚,在网上找了找,记录下. 第一步:将ida.cfg中cpp866 version的AsciiStringChars注释掉,把full version的AsciiStringChars取消 ...

httpclient总结

1.httpclient总结:一.基本知识准备(1)构建URI工具类,URIBuilder(2)HttpResponse类,可以添加Header信息 获取所有Header信息的方法,调用HeaderI ...

2015 Multi-University Training Contest 9

1001 Expression 式子不好推啊.见官方题解. 式子知道就方便了.处理好组合数和阶乘. 按区间长度从小到大递推完就好. # include # inclu ...

PE文件格式详解(上)

作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Spec ...

redis启动脚本报错

1.执行redis脚本启动报错 [root@localhost ~]# service redis start /var/run/redis_6379.pid exists, process is a ...

绕过js验证

我在火狐和谷歌下想删除对应js,由于是外部js引入的,没删掉.只好借用了工具. 这个工具也并不是多么的高大上,也许大家都用过,httprequester 步骤:打开火狐附加组件管理器——扩展——输入h ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值