算法系列——数组中的重复数字
来源:互联网 发布:淘宝加盟店可靠吗 编辑:程序博客网 时间:2024/06/11 03:32
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
解题思路
排序法
直接对数组进行排序,然后遍历数组即可。
时间复杂度为O(nlogn).空间复杂度O(1)
哈希表
用哈希表统计每个数字出现的次数,然后遍历哈希表,找到所有次数大于1的数字。时间复杂度为O(n),空间复杂度为O(1)
运用数组的数据特征
我们注意到数组中的数字都在0到n-1的范围内。如果这个数组中没有重复的数字,那么当数组排序之后数字的i将出现在下标为i的位置。由于数组中有重复的数字,有些位置可能存在多个数字,同时有些位置可能没有数字。
基本思路:
头到尾扫描数组每个数字,当扫描到下标为i的数字m时,首先比较m是不是等于i,如果是,继续扫描;如果不是,再拿m和第m个数字进行比较。如果他们相等,就找到第一个重复数字,如果不相等,交换两者位置。接下来重复上述过程,直到找到第一个重复数字。
时间复杂度为O(n),空间复杂度为O(1)
程序实现
public boolean duplicate(int numbers[],int length,int [] duplication) { if(numbers==null||length<=0) return false; for(int i=0;i<length;i++){ if(numbers[i]<0||numbers[i]>length-1) return false; } for(int i=0;i<length;i++){ while(numbers[i]!=i){ if(numbers[i]==numbers[numbers[i]]){ duplication[0]=numbers[i]; return true; } //交换 int temp=numbers[i]; numbers[i]=numbers[numbers[i]]; numbers[temp]=temp; } } return false; }
阅读全文
0 0
- 算法系列——数组中的重复数字
- C/C++面试之算法系列--去除数组中的重复数字
- 数组中的重复数字
- 数组中的重复数字
- 数组------数组中的重复数字
- 删除排序数组中的重复数字——LintCode
- 数组之—重复数字
- 去除数组中的重复数字
- 去除数组中的重复数字
- 去除数组中的重复数字
- 去除数组中的重复数字
- 算法系列--去除排序数组中的重复元素
- 数组中有重复数字系列题
- 数组中有重复数字系列题
- 算法练习——排序后的数组删除重复数字
- java常用算法之返回目标数字在有序数组中的位置(假设有序数组中不存在重复数字)
- 删除排序数组中的重复数字
- 题目:删除排序数组中的重复数字
- 用scala Map写个词频统计
- 正则表达式之贪婪与非贪婪模式(II)
- 始终要覆盖toString
- 作为程序员,你该如何评价别人的代码?
- 在设置的搜索中添加搜索项(例如指纹管理)
- 算法系列——数组中的重复数字
- springboot的缓存技术
- 模拟阻尼运动
- 修复WIN10下Prolific USB-to-Serial Comm Port驱动无法使用
- mysql组合索引用法与优化
- Powershell 命令实现每日给指定组添加全部AD成员
- codeforces 629-B. Far Relative’s Problem(思想)
- Spring Boot启动报错:Cannot determine embedded database driver class for database type NONE
- weex android 基础与扩展本地图片加载 gif播放自定义module