leetcode137. 只出现一次的数字Ⅱ
Posted 2021dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode137. 只出现一次的数字Ⅱ相关的知识,希望对你有一定的参考价值。
给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次。请你找出并返回那个只出现了一次的元素。
示例:
输入:nums = [0, 1, 0, 1, 0, 1, 99]
输出:99
思路:
因为数组当中存储的是int类型(32个bit位),所以我们可以统计数组当中元素的每个bit位出现1的次数。以传入数组元素为0, 1, 0, 1, 0, 1, 99为例。
从右往左,第一个bit位出现1的次数为4,第二个bit为出现1的次数为1,… 。然后将每个bit为出现的次数对3取余,因为数组当中除某个元素仅出现一次外,其余每个元素都恰出现三次,所以最终取余所得的32个bit位就是只出现一次的元素的二进制表示形式。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret = 0;
for (int i = 0; i < 32; i++) //int类型有32个bit位
{
int total = 0; //记录nums当中第i个bit位为1的元素个数
for (auto e : nums)
{
total += (e >> i) & 1; //统计数组nums当中第i个bit位为1的元素个数
}
if (total % 3 != 0)
{
//如果第i个bit位为1的元素个数不能被3整除
//那么说明只出现一次的数字的这一bit位为1
ret |= 1 << i;
}
}
return ret; //返回只出现一次的数字
}
};
以上是关于leetcode137. 只出现一次的数字Ⅱ的主要内容,如果未能解决你的问题,请参考以下文章