只出现一次的数字II。题意跟版本一几乎一样,唯一不同的地方是版本一其他数字出现了两次,版本二其他数字出现了三次。例子,
Example 1:
Input: [2,2,3,2] Output: 3Example 2:
Input: [0,1,0,1,0,1,99] Output: 99
这道题我先写一个我自己能看得懂的思路吧,discussion的高票答案我没有看懂。我的思路是建立一个32位的数字,来统计每一位上出现1的次数。如果某一个数字出现了三次,那么只要对32位上每一位%3,为0的那些数位就能拼凑出这个出现了3次的数字了。
时间O(n) - 遍历了N个数字
空间O(1)
Java实现
1 class Solution { 2 public int singleNumber(int[] nums) { 3 int res = 0; 4 for (int i = 0; i < 32; i++) { 5 int sum = 0; 6 for (int j = 0; j < nums.length; j++) { 7 sum += (nums[j] >> i) & 1; 8 } 9 res |= (sum % 3) << i; 10 } 11 return res; 12 } 13 }
JavaScript实现
1 var singleNumber = function(nums) { 2 let res = 0; 3 for (let i = 0; i < 32; i++) { 4 let sum = 0; 5 for (let j = 0; j < nums.length; j++) { 6 sum += (nums[j] >> i) & 1; 7 } 8 res |= sum % 3 << i; 9 } 10 return res; 11 };