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

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 = 0for i in range(32):# 只保留模3后剩余的位res |= (counts[i] % 3) << i# 处理符号位(第31位为符号位)if res >= 2**31:res -= 2**32return res

2. 位运算

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

http://www.mrgr.cn/news/82930.html

相关文章:

  • Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)
  • 【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程
  • 【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
  • ELK+filebeat+kafka
  • k8s-1.28.2 部署prometheus
  • linux定时执行脚本的方法
  • 【Rust自学】10.8. 生命周期 Pt.4:方法定义中的生命周期标注与静态生命周期
  • 9. C 语言 循环控制结构详解
  • 数据传送类指令
  • 【Linux】上传、下载、压缩、解压
  • Python 模拟登录网页,或者编写爬虫时模拟登录的详细总结
  • 【Rust自学】10.7. 生命周期 Pt.3:输入输出生命周期与3规则
  • 30天开发操作系统 第 12 天 -- 定时器
  • Java虚拟机面试题:JVM调优
  • [创业之路-241]:《从偶然到必然-华为研发投资与管理实践》-2- IPD流程中的业务线、技术线、职能支撑线
  • Web渗透测试之XSS跨站脚本 原理 出现的原因 出现的位置 测试的方法 危害 防御手段 面试题 一篇文章给你说的明明白白
  • Effective C++读书笔记——item11(自赋值)
  • 来说数据库
  • C++ Qt练习项目 QChar功能测试
  • 尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)
  • aardio —— 虚表 —— 模拟属性框
  • 安卓OCR使用(Google ML Kit)
  • 【华为OD机试E卷C卷D卷】跳马【C++/Java/Python】
  • Python应用指南:高德交通态势数据(一)
  • java 核心知识点——基础知识
  • 群论学习笔记