口碑好网站建设在哪里,个人网站备案电话访谈,一级造价工程师报考条件及时间,海宁自适应网站建设题目
在一个数组 nums 中除一个数字只出现一次之外#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。 思路
这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体#xff0c;本题只有一个数num出现一次#xff0c;其余的均出现三次
三次的话使用异或消无法…题目
在一个数组 nums 中除一个数字只出现一次之外其他数字都出现了三次。请找出那个只出现一次的数字。 思路
这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体本题只有一个数num出现一次其余的均出现三次
三次的话使用异或消无法消除首先进行一个转换
首先将所有数字都看成 32位 的二进制数接着将数组中的所有数字相加。那么对于某一位来说数值一定是 3N或3N1 所有出现3次的数字对该位置的贡献和一定是0或3即要么全0要么全1出现一次的数字对该位置的贡献一定是0或1所以对该位置的和用3取余结果就是出现一次的数字在该位置的值这种解法是具有通用性的即出现4次、5次、N次直接用4、5、N取余即可。 java代码如下
class Solution{public int singleNumber(int[] nums){int res 0;for(int i 0 ; i 32; i){//对于int每一位int bit 0;//计算该位上的和for(int num : nums){bit ((num i) 1);//有0出0全1出1}//对3取余即为res在该位上的值res ((bit % 3) i);//左移相当于乘i}return res;}
}