憨批是我

1-13这13个数放在还有14个元素的数组中只有唯一的一个元素值重复且均只出现一次每个数组元素只能访问一次 设计一个算法 把他找出来不用辅助空间

public class Test {

    /**
     * xor(汇编中表示)  异或0^0=0 1^1=0 2^2=0 一次类推  除0之外相同得0否则为1  因此0^任何数=任何数
     * 
     * 因此 假如数组中为 1223 (一个重复)   我们只需要让1^2^2^3 ^1^2^3 (后面的一二三为下标 这个题很凑巧)
     */
    public static void main(String[] args) {
        
         xorCalc();
         Calc();
         Calc1();
        
    }
    
    
    public static void xorCalc()
    {
        int arr[]= {1,2,3,6,4,5,7,8,9,10,11,13,12,10}; //这里简单的构造数组不弄1-100了 这里10重复
        int xor=0;
        
        for (int i = 1; i < arr.length; i++) {
            xor=xor^i;
            
        }
        
        
        for (int i = 0; i < arr.length; i++) {
            xor=xor^arr[i];
            
        }
        
        System.out.println(xor);
        
    }
    
    public static void Calc()
    {
        //暴力匹配
        Map<Integer, Integer> map =new HashMap<>();
        int arr[]= {1,2,3,6,4,5,7,8,9,10,11,13,12,10}; //这里简单的构造数组不弄1-100了 这里10重复
        
        for (int i = 0; i < arr.length; i++) {
            if (map.containsKey(arr[i])) {
                int temp=map.get(arr[i]);
                map.replace(arr[i],++temp );
                
            }else {
                map.put(arr[i], 1);
            }
            
        }
        
    for (int j = 1; j <= map.size(); j++) {
        
        if (map.get(j)==2) {
            System.out.println(j);
        }
    }
        
        
    }
    
    
    public static void Calc1()
    {//暴力匹配
        int arr[]= {1,2,3,6,4,5,7,8,9,10,11,13,12,10}; //这里简单的构造数组不弄1-100了 这里10重复
        int arr1[]=new int[15];//跟C++申请数组方式不太一样
        for (int i = 0; i < arr.length; i++) {
            arr1[arr[i]]++;
            
        }
        
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i]>1) {
                System.out.println(i);
            }
        }
        
    }
    
}

 

posted @ 2020-04-17 11:14  乌拉乌拉!!!  阅读(215)  评论(0编辑  收藏  举报