题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2] 输出: 3
示例 2:
输入: [0,1,0,1,0,1,99] 输出: 99
思路:
- 因为某个元素只出现了一次,其余每个元素都出现了三次,我们可以知道将他们的二进制相加,其中某一位上一定取余3一定会多出一个1
- 利用这个思路即可实现
AcCode:
class Solution { public static int singleNumber(int[] nums) { int result = 0; for (int i = 0; i < 32; i++) { int sum = 0; for (int j = 0; j < nums.length; j++) { if(((nums[j]>>i)&1)==1){ sum++; } } if(sum%3!=0){ result = result|1<<i; } } return result; } }