黑马程序员技术交流社区
标题:
算法题
[打印本页]
作者:
李长波
时间:
2012-11-10 19:59
标题:
算法题
有一个100万的数组,里边有两个是重复的,如何设计算法找到
作者:
打工人
时间:
2012-11-10 20:10
我也想知道
作者:
李长波
时间:
2012-11-10 20:14
我查查资料吧!有方法告诉你!
作者:
李长波
时间:
2012-11-10 20:18
http://xiva.iteye.com/blog/869981 看看这个!给分吧!
作者:
邵天强
时间:
2012-11-13 16:26
原理:首先创建一个数组,用于存储1000000的数据长度,然后创建一个集合对象,往集合中添加元素,利用集合中的contains方法可以方便的检查出是否已经包含了要添加的数据。
如果方法的返回值为false,则不存在,则把这个数据添加到集合中,如果方法的返回值为true,说明集合中已经存在了这个数据,就可以把这个数据和第一次出现(利用集合的indexOf方法)的输出,然后退出循环。
代码如下:
package com.itheima;
import java.util.*;
public class Test{
public static void main(String[] args){
int[] arr = new int[1000000];
for(int i = 0; i<1000000;i++){
arr
= i+1; //从1--1000000没有重复的
}
arr[1333] = 96;//将第1334个数改成96,这样就只有两个重复的数96
List<Integer> list = new ArrayList<Integer>();//创建一个集合对象
for(int i = 0 ; i < 1000000;i++){
Integer m = new Integer(arr
);
//检查此时集合中是否包含要操作的数据,如果不包含则添加,包含则首先找到第一次出现的下标和此时的下标然后退出
if(!list.contains(m)){
list.add(m);
}else{
int j = list.indexOf(m) ;//第一次出现
System.out.println("第"+(j+1)+"个数和第"+(i+1)+"个数重复为:"+m);
break; //找到即退出
}
}
}
}
3.jpg
(22.08 KB, 下载次数: 45)
下载附件
2012-11-13 16:26 上传
作者:
jerry2627
时间:
2012-11-13 16:34
将数组里的元素往一个空的Treeset集合里面扔 判断返回值是否为真 若为false则说明这个元素先前已经存进去了 so you find it!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2