A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李长波 中级黑马   /  2012-11-10 19:59  /  1916 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一个100万的数组,里边有两个是重复的,如何设计算法找到

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
我也想知道
回复 使用道具 举报
我查查资料吧!有方法告诉你!
回复 使用道具 举报
http://xiva.iteye.com/blog/869981  看看这个!给分吧!
回复 使用道具 举报
原理:首先创建一个数组,用于存储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;  //找到即退出
            }
        }
    }
}

点评

有没有效率更高点的呢  发表于 2012-11-13 16:29

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
将数组里的元素往一个空的Treeset集合里面扔 判断返回值是否为真  若为false则说明这个元素先前已经存进去了 so you find it!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马