当前位置: 首页 > article >正文

137. 只出现一次的数字 II

137. 只出现一次的数字 II

  • 题目-中等难度
  • 1. 位运算
  • 2. 位运算

题目-中等难度

给你一个整数数组 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 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/single-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. 位运算

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
         # 初始化32位计数器
        counts = [0] * 32
        
        # 遍历数组中的每个数字
        for num in nums:
            for i in range(32):
                # 统计第i位的1的个数
                counts[i] += (num >> i) & 1
        
        # 还原结果
        res = 0
        for i in range(32):
            # 只保留模3后剩余的位
            res |= (counts[i] % 3) << i
        
        # 处理符号位(第31位为符号位)
        if res >= 2**31:
            res -= 2**32
        
        return res
        

2. 位运算

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        ones, twos = 0, 0
        for num in nums:
            # 更新 ones 和 twos
            # 将当前数字 num 的每一位与 ones 的当前位进行异或操作,并用~two清除那些已经被记录为两次的位
            ones = (ones ^ num) & ~twos
            # 将当前数字 num 的每一位与 twos 的当前位进行异或操作,并用~one清除那些已经被记录为一次的位
            twos = (twos ^ num) & ~ones
        return ones

http://www.kler.cn/a/472062.html

相关文章:

  • MYSQL-------------优化MYSQLserver磁盘 I/O 问题及相关优化策略
  • rabbitmq的三个交换机及简单使用
  • 41.6 安装部署,效果测试,架构回顾
  • pytest和unittest的区别
  • 使用 IP 核和开源库减少 FPGA 设计周期
  • Scala语言的循环实现
  • 009:传统计算机视觉之边缘检测
  • Linux 常用命令 - touch 【创建空文件与修改时间戳】
  • 【C语言】可移植性陷阱与缺陷(八): 随机数的大小
  • 如何安装和配置PHP开发环境?
  • apex安装
  • crawl4ai 大模型友好格式输入爬虫框架
  • LLM架构从基础到精通之NLP基础1
  • Java-基于Redisson的Redis工具类RedissonUtils
  • WebSocket 性能优化:从理论到实践
  • 51单片机——中断(重点)
  • 《空舞的巨兽》官方学习版
  • 批量写入数据到数据库,卡顿怎么解决
  • 根据状态修改圆锥扩散材质并实现扩散效果【Mars3d】
  • 百度Android面试题及参考答案 (下)