考察的知识点:位运算;

解答方法分析:

  1. 定义一个长度为32的数组bits,用来保存每个位上的1的个数。
  2. 遍历牛的标识数组nums,对每个元素进行遍历。
  3. 对于当前元素,将其转换为二进制表示,并在遍历过程中,统计每个位上的1的个数,同时将结果保存在bits数组中。
  4. 遍历结束后,对bits数组中的每个元素进行取模操作,即将每个位上的1的个数变为3的倍数。
  5. bits数组转换为一个整数result,即为只出现了一次的牛的标识。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */
    int singleNumberII(vector<int>& nums) {
        vector<int> bits(32, 0);
        int result = 0;
        for (int num : nums) {
            for (int i = 0; i < 32; ++i) {
                bits[i] += (num >> i) & 1;
            }
        }
        for (int i = 0; i < 32; ++i) {
            bits[i] %= 3;
            result |= (bits[i] << i);
        }
        return result;
    }
};