LC-出现一次的数字II

出现一次的数字II

//SingleNumberII
/*现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素 
注意: 
你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么? */
class Solution {
public:
	/**
	*
	* @param A int整型一维数组
	* @param n int A数组长度
	* @return int整型
	*/
	//int类型共32位,将数组中n个数二进制各位1累加后%3,若为出现三次的数,该位为0,若为1则
	//说明是仅出现一次的数的二进制位。
	int singleNumber(int* A, int n) {
		int res = 0;
		for (int i = 0; i < 32; ++i)
		{
			int bit = 0; 
			for (int j = 0; j < n; ++j)
			{
				bit += (A[j] >> i) & 1;  //右移i位与0000001求余得到最后一位(循环中当前第i位)
			}                            //的数值
			res |= (bit % 3) << i;       //求余判断该为是否为重复数值,左移恢复原位置,
		}                                //或运算组合
		return res;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值