美文网首页Android小牛算法
查找数组中至少一个重复的数字

查找数组中至少一个重复的数字

作者: zhangxuanchen | 来源:发表于2017-01-20 12:48 被阅读4次

    1.一个数组长度是n+1 范围是1~n-1 查找至少一个数组中重复的数字

    public static void main(String[] args) {
            //长度必须是N+1, 范围是1~N-1
            
            int[] a = new int[]{1,2,3,4,5,6,7,8,3,9};
            System.out.println(find1(a) + "");
            System.out.println(find2(a) + "");
        }
        
        static int find1(int[] a){
            int[] is = new int[a.length];
            for(int i = 0 ; i < a.length ; i++){
                is[a[i]] = ++is[a[i]];
                if(is[a[i]] > 1){
                    return a[i];
                }
            }
            return -1;
        }
        
        static int find2(int[] a){
            int x = 0; 
            int y = 0;
            do{
                x = a[a[x]];
                y = a[y];
            }while(x != y);
            x = 0; //x y 获取到折中的位置
            do{
                x = a[x];
                y = a[y];
            }while(x != y);
            return x;
        }```
    
    第一种方式使用位图当N较大的时候会比较费内存。
    第二种方式使用单链表存在环来判断。虽然没第一种快,但是节省内存而且时间复杂度只为N,在特定条件下是一种比较实用的算法。

    相关文章

      网友评论

        本文标题:查找数组中至少一个重复的数字

        本文链接:https://www.haomeiwen.com/subject/oqbwbttx.html