news 2026/6/9 1:05:33

只出现一次的数字2——位运算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
只出现一次的数字2——位运算

给你一个整数数组nums,除某个元素仅出现一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。

示例 1:

输入:nums = [2,2,3,2]输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,100]输出:100

思路:

由于数组中的元素都在 int(即 32 位整数)范围内,因此我们可以依次计算答案的每一个二进制位是 0 还是 1。

具体地,考虑答案的第 i 个二进制位(i 从 0 开始编号),它可能为 0 或 1。对于数组中非答案的元素,每一个元素都出现了 3 次,对应着第 i 个二进制位的 3 个 0 或 3 个 1,无论是哪一种情况,它们的和都是 3 的倍数(即和为 0 或 3)。因此:

答案的第 i 个二进制位就是数组中所有元素的第 i 个二进制位之和除以 3 的余数。

这样一来,对于数组中的每一个元素 x,我们使用位运算 (x >> i) & 1 得到 x 的第 i 个二进制位,并将它们相加再对 3 取余,得到的结果一定为 0 或 1,即为答案的第 i 个二进制位。

细节:

在 C++、Java、Go 等静态语言中,int通常固定是32 位(4字节)

  • 如果你用有符号int,最高位(第 31 位)被硬性规定为符号位。当这个位置是1时,系统会按照补码把它识别为负数。

  • 在位运算(比如按位加法、左移等)溢出 32 位时,高位会被自动截断,符号位自然就生效了。

但是Python(Python 3)的int是无上限的(无限精度)

Python 根本没有固定的“第 31 位是符号位”这个概念。当你一直往左移或者做累加时,Python 的数字会变成 32 位、64 位甚至 100 位,它永远不会自动溢出截断

因此,当你在 Python 中模拟 32 位有符号整数运算时,如果第 31 位变成了1,Python 会认为这只是一个很大的正数($2^{31}$),而不会把它当成负数。这就迫使我们必须手动写代码: ans-=(1<<i)。

from typing import List class Solution: def singleNumber(self, nums: List[int]) -> int: ans=0 for i in range(32): totle=0 for num in nums: totle+=(num >>i)&1 if totle%3==1: if i==31: ans-=(1<<i) else: ans |= (1 << i) return ans print(Solution().singleNumber([2,2,3,2]))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 0:49:26

鸿蒙原生 ArkTS:border 的盒模型、深层嵌套约束传递与 scale 缩放

一、引言 最后这一篇&#xff0c;我们聚焦三个「高级但容易被忽视」的场景&#xff1a;border 的尺寸计算机制、多层嵌套时的约束传递、以及 scale 缩放与 width(100%) 的交互。 这三个场景的共同特点是&#xff1a;它们都涉及 width(100%) 与另一个装饰性属性&#xff08;bord…

作者头像 李华
网站建设 2026/6/9 0:49:15

通达信缠论分析插件:3步快速实现专业级技术分析可视化

通达信缠论分析插件&#xff1a;3步快速实现专业级技术分析可视化 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 想要在通达信软件中实现专业的缠论技术分析吗&#xff1f;通达信缠论可视化分析插件正是…

作者头像 李华
网站建设 2026/6/9 0:44:06

《Ionic Select》详解与最佳实践

《Ionic Select》详解与最佳实践 引言 随着移动应用开发的快速发展,越来越多的开发者选择使用前端框架来简化开发过程。其中,Ionic作为一款开源的跨平台移动应用开发框架,凭借其强大的功能和简洁的语法,受到了广泛的欢迎。在Ionic中,ionic-select组件是一种非常实用的下…

作者头像 李华
网站建设 2026/6/9 0:39:04

数字签名用于**验证数据来源的真实性、完整性和不可否认性**,其核心是使用私钥签名、公钥验签,适用于身份认证、文档签署、软件分发等场景

数字签名的应用通常不包括 C. 密码存储 ✅ 理由&#xff1a;数字签名用于验证数据来源的真实性、完整性和不可否认性&#xff0c;其核心是使用私钥签名、公钥验签&#xff0c;适用于身份认证、文档签署、软件分发等场景。而密码存储应采用加盐哈希&#xff08;如 bcrypt、scryp…

作者头像 李华
网站建设 2026/6/9 0:36:20

【开源方案】微信聊天记录本地化永久保存与智能分析完整指南

【开源方案】微信聊天记录本地化永久保存与智能分析完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

作者头像 李华