黑马程序员技术交流社区

标题: 算法题 [打印本页]

作者: 李长波    时间: 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;  //找到即退出
            }
        }
    }
}


作者: jerry2627    时间: 2012-11-13 16:34
将数组里的元素往一个空的Treeset集合里面扔 判断返回值是否为真  若为false则说明这个元素先前已经存进去了 so you find it!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2