算法提炼--位运算(1)(12.4)

简介: 算法提炼--位运算(1)(12.4)

题目:

1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助存储空间,能否设计一个算法实现?

刚开始的想法是,直接排序,然后相邻的元素进行对比不就好了? 但后来发现没有这么简单,题目要求,每个数组元素只能访问一次。


位运算技巧:a^a = 0 a^0 = a

题解:根据上面的式子,根据相同的数相与为0,0与任何数与为任何数可以求得

public static void main(String[] args) {
        int N = 1001;
        int  x  = 0;
        int a [] = new int [N];
        for(int i = 0;i<a.length-1;i++){
            a[i] = i+1;
        }
        a[a.length-1] = new Random().nextInt(N-1)+1;
        int index = new Random().nextInt(a.length-1);
        swap(a[index],a[a.length-1]);
        for(int i =1;i<=a.length-1;i++){
            x = x^i;
        }
        for(int i =0;i<a.length;i++){
            x = x^a[i];
        }
        System.out.println(x);
        }
         public static void swap(int a,int b){
        a=a^b;
        b=a^b;
        a=a^b;
    }


题解二:暴力求解,将一个数组中的数作为另一个数组的索引通过数组大小来获取所求值

public static void main(String[] args) {
        int N = 1001;
        int  x  = 0;
        int a [] = new int [N];
        for(int i = 0;i<a.length-1;i++){
            a[i] = i+1;
        }
        a[a.length-1] = new Random().nextInt(N-1)+1;
        int index = new Random().nextInt(a.length-1);
        swap(a[index],a[a.length-1]);
//       直接暴力解法
        int [] h = new int [N];
        for(int i = 0;i<a.length;i++){
            h[a[i]]++;
        }
        for(int i =0;i<a.length;i++){
            if(h[i] == 2){
                System.out.println(i);
                break;
            }
        }
    }
    public static void swap(int a,int b){
        a=a^b;
        b=a^b;
        a=a^b;
    }


相关文章
|
7月前
|
算法
算法思想总结:位运算
算法思想总结:位运算
|
7月前
|
机器学习/深度学习 存储 算法
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
【算法基础】常数操作 时间复杂度 选择排序 冒泡排序 插入排序 位运算
|
算法
基础算法:位运算
基础算法:位运算
55 0
|
4月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
4月前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
4月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
4月前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
4月前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
4月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
|
6月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
48 1