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. 只出现一次的数字Ⅱ的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 137.只出现一次的数字 II

LeetCode 137.只出现一次的数字 II

LeetCode 137 只出现一次的数字 II

[LeetCode] 137. 只出现一次的数字 II

LeetCode 137. 只出现一次的数字 II

137. 只出现一次的数字 II