Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
含义:数组中每个整数都出现了三次,只有一个出现了一次,找出来
1 public int singleNumber(int[] nums) { 2 // 我们可以建立一个32位的数字,来统计每一位上1出现的个数,我们知道如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0, 3 // 我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字 4 int res = 0; 5 for (int i = 0; i < 32; ++i) { 6 int sum = 0; 7 for (int j = 0; j < nums.length; ++j) { 8 sum += (nums[j] >> i) & 1; 9 } 10 res |= (sum % 3) << i; 11 } 12 return res; 13 }