考察的知识点:位运算;
解答方法分析:
- 定义一个长度为32的数组
bits
,用来保存每个位上的1的个数。 - 遍历牛的标识数组
nums
,对每个元素进行遍历。 - 对于当前元素,将其转换为二进制表示,并在遍历过程中,统计每个位上的1的个数,同时将结果保存在
bits
数组中。 - 遍历结束后,对
bits
数组中的每个元素进行取模操作,即将每个位上的1的个数变为3的倍数。 - 将
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; } };