找出数组中的重复数字

问题

长度为n的数组中存放着n个数字,每个数字的范围都在0~n-1中。找出数组中的重复数字。

暴力法
1.标志数组

最容易想到的就是暴力方法,那么如何暴力破解呢,最容易想到的就是新建一个标志数组,扫描数组中每个元素,每扫到一个元素,就将标志数组中该索引的值置为1,于是流程就变成先检查对应的标志是否为1,若已经为1了,就找到重复数字

2.哈希表

利用哈希表,送头到尾扫描数组,当你扫描到一个数字的时候,在O1时间内判断是否已经在哈希表中,从而找出重复数字

3.排序

将数组排序之后很容易找到重复数字

交换

若没有重复数字,那么下标为i的元素的值一定为i,那么就可以从头遍历数组,若a[i]!=i,就去找下标为a[i]的元素的实际的值,如果这个值等于a[i],那么就找到了重复数字,如果不等,就将二者交换,这样下标为a[i]的元素实际值就成了a[i]。继续比较下去,就能找到重复数字。

如果不允许修改数组
1.二分查找
2.双指针
3.位运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值