【算法】【线性表】【数组】只出现一次的数字 II

发布时间 2024-01-08 17:49:06作者: 酷酷-

1  题目

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:

  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

2  解答

class Solution {
    public int singleNumber(int[] nums) {
        int res = 0;
        for (int i = 0; i < 32; i++) {
            // i 表示二进制位的第 i 位 从0-31位
            // total 表示当前位的1的个数
            int total = 0;
            for (int num : nums) {
                // (num >> i) num 有符号右移i位 & 1 得到 第i位是0还是1
                total += ((num >> i) & 1);
            }
            // 第 i 位不等于0
            if (total % 3 != 0) {
                // 置 res 的第 i 位为1
                res |= (1 << i);
            }
        }
        return res;
    }
}

加油。