一个数组有100个数,其中有两个是一样的怎么得到那两个数在数组中是第几位
这个要考虑到大量数据操作,必须优化代码
移动面试题哦
谢谢大家帮忙,麻烦给一下代码。

解决方案 »

  1.   

    循环一次即可得出:
    大致思路:将数组以数字为key,数字所在位置为value放入map,在每次放入之前比较map中的值,如果有相同的停止循环(即已经找出答案)
    这里没有考虑map的算法,继续关注lx
      

  2.   

    我觉得先把所有的数放入一个LinkedHashMap中(LinkedHashMap是有顺序的),然后比较这个Map和原来的数组,那个位置不等,就是重复的了。
      

  3.   

    我觉得先把所有的数放入一个LinkedHashMap中(LinkedHashMap是有顺序的),然后比较这个Map和原来的数组,那个位置不等,就是重复的了。
      

  4.   

    如果是单纯的数组操作,至少一层循环是必须的,那大数据量肯定会影响性能,hash算法应该是比较好的算法了,
    直接用map可以解决,而如果是很大型的数据,最好还是借助数据库,或者比较牛点的可以自己建索引也可以,
    当数据量很大的时候,索引的作用会体现的尤其突出
      

  5.   

    听了听建议  终于做好了!public class ArraysRondom {
    public static void main(String[] args) {
    Method();
    }
    public static void Method(){
    int a[] = new int[10];
    for (int i = 0; i < a.length; i++) {
    a[i] = (int) (Math.random() * 10);
    }
    boolean flag=false;
    for (int i = 0; i < a.length; i++) {
    for (int j = 0; i < a.length; j++) {
    if(a[i]==a[j] && i!=j){
    flag=true;
    System.out.println("数组中存在两个相同的数"+a[i]+"下标分别是:"+i+" "+j);
    }
    }
    }
    if( ! flag)
    System.out.println("数组中不存在两个相同的数!");
    }
    }
      

  6.   

    这样如何呢?package demo;
    import java.util.*;public class Test { // 利用Set 的add()方法在放入存在的数时会返回false .
    public static void test(int arr[]) {
    Set set = new HashSet();
    int data = 0;
    int index1 = 0;
    int index2 = 0;
    for(int i=0; i<arr.length; i++) {
    boolean b = set.add(arr[i]);
    if(!b) { //找到重复的数
    data = arr[i];
    index2 = i; //第二次出现的位置
    for(int j=0; j<arr.length; j++) {
    if(arr[j] == arr[i]) {
    index1 = j; // 第一次出现的位置
    break;
    }
    }
    break;
    }
    } System.out.println("相同的数是:"+data);
    System.out.println("所在位置分别是:"+index1+" , "+index2);
    } public static void main(String args[]) {
    int arr[] = new int[100];
    for(int i=0; i<99; i++) {
    arr[i] = i;
    }
    arr[99] = 88;
    test(arr);
    }
    }