Q51:数组中重复的数字
来源:互联网 发布:c语言编程的小游戏 编辑:程序博客网 时间:2024/06/06 04:45
public class Q51数组中重复的数字 { /** * 题目:数组中重复的数字 * 题目说明:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 * 请找出数组中任意一个重复的数字。例如输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或3. * 解题思路:(1)数组中的元素均属于0到n-1的范围内,假设数组中没有重复的数字,则排序之后对应下标为i的元素的值为i。 * 由于存在存在重复,在有些位置存在若干个数字,有些位置则空着。(2)扫描数组中下标为i的元素,如果元素m也为i,则继续扫描下一个数字。如果i和m不相等,则比较大小 * 如果m和第m个数字相等,即m=array[m],则找到一个重复的数字;如果m和第m个数字不相等(m != array[m]),则把第i个数字m,放到下标为m的位置上。 * (3)重复上述操作,直到找出重复的元素。 */ public static void main(String[] args) { // TODOAuto-generated method stub Q51数组中重复的数字 test = new Q51数组中重复的数字(); int[] array = {2,3,1,0,2,5,3}; test.repetitionNum(array); } public boolean repetitionNum(int[] array){ if(array == null || array.length ==0)//判断数组的合法性 return false; for(int i = 0; i < array.length; i++){//判断数组中元素的合法性 if(array[i] < 0 || array[i] > array.length) return false; } for(int i = 0; i < array.length; i++){//如果array[i]==i;则移动到下一个元素i++ while(array[i] != i){ if(array[i] == array[array[i]]){//由于array[i]==m,则判断array[m]==m,相等表示存在重复 System.out.println(array[i]);//输出第一个重复的数字 return true; } int temp = array[i];//array[i]相当于m,array[i]!=m,则交换,让array[m]==m array[i] = array[temp]; array[temp]= temp; } } return false; }}
0 0
- Q51:数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 数组中重复的数字
- 【Linux系统编程】线程同步与互斥:读写锁
- 【项目学习】——C#自动生成错误日志
- bzoj 4453: cys就是要拿英魂!(后缀数组+二分)
- RasDialFunc1
- JZOJ4724. 斐波那契
- Q51:数组中重复的数字
- 操作系统-处理机调度
- [Linux]jenkins的安装
- [350]Intersection of Two Arrays II
- 总结iframe高度自适应,自适应子页面高度
- Bootstrap+BootstrapValidator+Mybatis实现通用单字段验证V1(待改进)
- 最短距离算法
- CF706A
- MATLAB 学习笔记