0
点赞
收藏
分享

微信扫一扫

数组中只出现一次的数字

舍予兄 2021-09-21 阅读 114
今日算法
题目描述:
示例 1:
示例 2:
示例 3:
思路:
代码实现:
class Solution {
    public int[] singleNumber(int[] input) {
 // 结果数组.
        int[] arr = new int[2];
        int result = 0, index = 0;
        // 设只出现过一次的数字为A,B. result=A^B;
        for (int i = 0; i < input.length; i++) {
            result ^= input[i];
        }
        // 从右往左遍历查找A,B第一个不同的二进制位.
        while ((result & 1) == 0) {
            result = result >>> 1;
            index++;
        }
        // 将数组分为包含A与包含B的两部分.
        for (int num : input) {
            if (((num >>> index) & 1) == 0) {
                arr[0] ^= num;
            } else {
                arr[1] ^= num;
            }
        }
        return arr;
    }
}
举报

相关推荐

0 条评论