力扣链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/
题目描述
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
思路:位运算+逐位统计
如果去掉只出现一次的数字,统计每一位上1和0出现的次数,则一定都可以被3整除。因此只要统计0或1在每一位出现的次数,如果该次数除以3余1(一定只余1),就说明落单的数这一位是1。
步骤:
代码:
/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { let res = 0; for(let i = 0; i < 32; i++){ let count = 0; for(let num of nums){ if(num & (1<<i)){ count++; } } if(count % 3 === 1){ res += Math.pow(2, i); } } return res; };
时间复杂度:O(N)
空间复杂度:O(1)
原文:https://www.cnblogs.com/xintangchn/p/13264783.html