一组数中如果只有一个数是1个,其他数是3个,找出这个数?

来源:互联网 发布:沃尔玛库存优化管理 编辑:程序博客网 时间:2024/06/05 05:03

思想:模拟3进制不进位加法运算,所有数相同位相加对3取余,得到的结果要么为1,要么为0,最终结果即为那个出现一次的数。

代码:

    public int getSingle(int[] arr, int k){        int res = 0;        int sum = 0;        for (int i = 0; i < 32; i++) {            sum = 0;            for (int j = 0; j < arr.length; j++) {                sum += (arr[j]>>i)&1;            }            if(sum % 3 == 1){                res = res | (1<<i);            }        }        return res;    }

算法时间复杂度O(3N),空间复杂度O(1)

该思想可以推广到一个数组中,只有一个数只出现了一次,其他数全是出现了K次,找出这个数。模拟K进制不进位加法。

阅读全文
0 0