给你一个整数数组 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个元素)和一个独立的元素,因为相同元素相同二进制位的数值是一样的,因此可能产生的是3m(n>=m)个1(如果独立的那个元素该位是0),也可能独立的那个元素该位也是1,因此可能产生的是3m+1(n>=m)个1。

因此凭借1的个数,就可以推出独立元素所有为1的二进制位,从而还原出独立的那个元素

代码

func singleNumber(nums []int) int {res:=int32(0)for i := 0; i < 32; i++ {//检查每个二进制位c:=int32(0)for _, num := range nums {c+=int32(num)>>i&1}if c%3>0{//还原独立的元素res|=1<<i}}return int(res)
}

leetcode 137. 只出现一次的数字 II(位运算)相关推荐

  1. 【leetcode】只出现一次的数字(位运算)

    LeetCode136:只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 解题思路: 这里可以使用异或运算.即两个相同的数字异或 ...

  2. Leetcode 137. 只出现一次的数字 II 解题思路及C++实现

    解题思路: 分别统计32位上1的个数tmp,然后对tmp进行对3求余,就能将出现三次的数去掉.最后通过 tmp<<i 将这一位的结果加到res上. class Solution { pub ...

  3. LeetCode 137. 只出现一次的数字 II

    思路:讨论组有大佬想到了设计电路问题,即用两位二进制来表示某个数出现的次数,当出现3次时,置为0: 但没理解透彻  还不还扩展,这里介绍另一位大佬的思路. 由32位二进制数表示结果,从第一位开始计算, ...

  4. 137. 只出现一次的数字 II

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: ...

  5. LeetCode 260. 只出现一次的数字 III(位运算)

    1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

  6. Leetcode-137. 只出现一次的数字 II (python3实现)

    题目链接:Leetcode137 只出现一次的数字II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度 ...

  7. LeetCode[136.只出现一次的数字](简单) -- java

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明:你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2 ...

  8. LeetCode:136. 只出现一次的数字

    136. 只出现一次的数字 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.法一: 遍历 nums\text{nums}nums 中的每一个元素 如果某个 nums\text{nums} ...

  9. Java实现 LeetCode 136 只出现一次的数字

    136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现 ...

最新文章

  1. SpringBoot服务上线流程
  2. c++成员函数的调用
  3. Codeforces Round #309 (Div. 2) C
  4. 翟树卿:如何让数据挖掘助力精准化营销
  5. javascript自定义事件应用实例
  6. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...
  7. linux的vi命令输入C,Linux中C语言简单实现之vi篇(详细内容)
  8. 网盘中搭建git服务
  9. C#多线程学习笔记(三)
  10. linux 执行安装脚本,批量执行Linux安装程序和脚本
  11. 计算机网络(HTTP、TCP)的连接管理
  12. UE4 Websocket
  13. 运筹学学习笔记2 python-or tools 使用
  14. linux-通过BCM2835芯片手册进行IO操控的代码编程
  15. 关于网络的命令及介绍
  16. Microsoft Edge逃离360之路
  17. 第一次开发EOS区块链的经验
  18. 外企8年,我学到的人性化,不止是宽容
  19. psa加密_PSA:请注意这种新的Google翻译网络钓鱼攻击
  20. UE4家装系统工程源码/内含模型/材质/模型拖拽

热门文章

  1. 操作系统(五)输入/输出(I/O)管理
  2. 508. 出现次数最多的子树元素和
  3. 三年Java开发,java基础常问面试题
  4. 渣本毕业两年经验,大厂面试题汇总
  5. 丁香园 武汉 神童_杭州、武汉、成都哪个城市更适合程序员发展
  6. redis的源码编译安装+发布订阅+RDB持久化
  7. java常用设计模式一:单例模式
  8. python中的序列化与反序列化
  9. DRUID连接池的简单使用
  10. Linux启动提示Kernel panic - not syncing: Attempted to kill init解决办法