问题描述:

  在长度为n的数组中,所有的元素都是0到n-1的范围内。 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字。 例如,输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出为2或3

解题思路:

1、判断输入数组有无元素非法 
2、从头扫到尾,只要当前元素值与下标不同,就做一次判断,numbers[i]与numbers[numbers[i]],相等就认为找到了重复元素,返回true,否则就交换两者,继续循环。直到最后还没找到认为没找到重复元素,返回false

算法:

/**
* 找到数组中重复的数字
* 问题描述:在长度为n的数组中,所有的元素都是0到n-1的范围内。
* 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字。
* 例如,输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出为2或3
*
*/
public class DuplicateNumber { public static void main(String[] args) {
int[] array = {2,3,1,0,2,5,3};
int duplicate = duplicateNumber(array);
System.out.println("重复的数字为: " + duplicate);
} /**
* 求数组中重复的数字
* 分析:如果数组中没有重复的数字,则第i位置应该放置的数字为i。可以重排此数组,让对应位置上的数字对应。
*/
private static int duplicateNumber(int[] array) {
// TODO Auto-generated method stub
if(array == null || array.length <= 0){
return -1;
}
for(int i=0;i<array.length;i++){ //判断输入数组的合法性
if(array[i] < 0 || array[i] >= array.length){
return -1;
}
}
for(int i=0;i<array.length;i++){
if(i != array[i] && array[i] == array[array[i]]){ //重复数据
return array[i];
}
while(i != array[i]){ //将数字与第m个位置上的数字交换
exchange(array, i, array[i]);
}
}
return -1;
} /**
* 交换数组array中的第i位和第j位
public static void exchange(int[] array, int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}

最新文章

  1. shell条件判断中-a至-z的含义
  2. Loadrunner关联取参及设置检查点
  3. Base Filtering Engine 拒绝访问解法
  4. Secure Socket Tunneling Protocol Service服务无法启动(win7)
  5. hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
  6. javascript代码注意事项
  7. 程序员的家!我终于拥有自己的blog了!!!
  8. windows下sqlplus / as sysdba报ora-12560的解决方法
  9. 谈话节目APE系列:如何成为技术达人
  10. js继承的常用方法
  11. CDN 机制
  12. WEB前端中rem单位的应用(一)
  13. office365的开发者训练营,免费,在微软广州举办
  14. C_C++变量命名规则
  15. C#单元测试分享ppt
  16. 【算法基础】卡尔曼滤波KF
  17. 吴裕雄 30-MySQL 及 SQL 注入
  18. 遍历 JSON JavaScript 对象树中的所有节点
  19. Mysql 主- 开启binlog
  20. winfrom 窗口起始位置为屏幕中央

热门文章

  1. 7、Spring教程之使用注解开发
  2. 在docker容器中使用cplex-python37
  3. 图片的黑魔法——GitHub 热点速览 v.21.13
  4. Android Studio 安装及配置
  5. 谷歌SRE运维模式解读
  6. HTTP2和 HTTPS来不来了解一下?
  7. OO_Unit4 UML模型化设计总结
  8. java面试一日一题:请讲下对mysql的理解
  9. Go-21-结构体
  10. Day16_96_IO_available() 和 skip()方法