北京互联网公司网站建设,金融投资网站开发,做电商有那个网站,安徽建设工程信息网站给你一个整数数组 nums #xff0c;除某个元素仅出现 一次 外#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1#xff1a;
输入#xff1a;nums [2,2,3,2] 输出#xff1a;3 示例 2#xff1a;
输入#xff1a;nums [0,1,0,…给你一个整数数组 nums 除某个元素仅出现 一次 外其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1
输入nums [2,2,3,2] 输出3 示例 2
输入nums [0,1,0,1,0,1,99] 输出99
提示
1 nums.length 3 * 104 -231 nums[i] 231 - 1 nums 中除某个元素仅出现 一次 外其余每个元素都恰出现 三次
解题思路
因为除某个元素仅出现 一次 外其余每个元素都恰出现 三次 将所有元素的二进制排成一列对齐其中每一列即相同二进制位出现的1的次数只可能是3的倍数或者是3的倍数加一。
为什么是3的倍数或者是3的倍数加一
因为数组由2部分组成n个三元组相同的3个元素和一个独立的元素因为相同元素相同二进制位的数值是一样的因此可能产生的是3mnm个1如果独立的那个元素该位是0也可能独立的那个元素该位也是1因此可能产生的是3m1nm个1。
因此凭借1的个数就可以推出独立元素所有为1的二进制位从而还原出独立的那个元素
代码
func singleNumber(nums []int) int {res:int32(0)for i : 0; i 32; i {//检查每个二进制位c:int32(0)for _, num : range nums {cint32(num)i1}if c%30{//还原独立的元素res|1i}}return int(res)
}