给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
/*
解题思路,让所有数相加,因为3个数相同,那么他们二进制位就相同,所以除以3可以整除,那么所有
二进制位相加,逐位除以3余数就是出现1次二进制位的数字
*/
public int singleNumber(int[] nums) {
int ans =0;
//对每一个二进制位进行加运算
for(int i=0;i<32;i++){
int total=0;
for(int num:nums){
//提取出目标位,进行相加
total+=(num>>i)&1;
}
if(total%3!=0){
//左移是为了还原目标位
ans|=(1<<i);
}
}
return ans;
}
网友评论