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

【11_只出现一次的数字】

 问题

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

思路

由于数组中除了一个元素之外,其他所有元素都成对出现,我们可以遍历数组,
将所有元素进行异或运算。成对的元素在异或运算中会相互抵消,最终剩下的就是那个只出现一次的元素。

解法

class Solution:
    def singleNumber(self, nums: list[int]) -> int:
        result = 0
        for num in nums:
            result ^= num
        return result

if __name__ == '__main__':
    nums =[1,2,2,3,3,9]
    solution = Solution()
    result = solution.singleNumber(nums)
    print(result)

学习

1、使用位运算的方法,特别是异或(XOR)运算。异或运算的特性是:

1)任何数与自己异或的结果为0:a ^ a = 0
2)任何数与0异或的结果是自己:a ^ 0 = a
3)异或运算是可交换的:a ^ b = b ^ a
4)异或运算是可结合的:(a ^ b) ^ c = a ^ (b ^ c)


2、异或操作有两个重要的性质:

任何数和它本身做 异或 操作结果都是 0。
任何数和 0 做 异或 操作结果都是它本身。

由于数组中除了一个元素之外,其他所有元素都成对出现,我们可以遍历数组,将所有元素进行异或运算。成对的元素在异或运算中会相互抵消,最终剩下的就是那个只出现一次的元素。


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

相关文章:

  • vscode通过ssh连接服务器实现免密登录
  • 怎么用vs编python文件
  • 【C语言】可移植性陷阱与缺陷(八): 随机数的大小
  • 前后端分离架构设计与实现:构建现代Web应用的基石
  • 【python】matplotlib(radar chart)
  • 使用WebSocket 获取实时数据
  • flink的EventTime和Watermark
  • Couldn‘t resolve host name for http://mirrorlist.centos.org
  • 《Swift 结构体》
  • 基于SMT32U575RIT单片机-中断练习
  • 【蓝桥杯——物联网设计与开发】Part2:OLED
  • 债券回购简述
  • HTTP 协议中,GET、PUT、POST、DELETE、OPTIONS 和 PATCH 区别
  • Git 常用命令及其使用场景
  • RabbitMQ ubuntu 在线安装
  • _decl_class_registry 与 metadata.sorted_tables的区别
  • 以柔资讯-D-Security终端文件保护系统 logFileName 任意文件读取漏洞复现
  • 机器学习——线性回归
  • 运动相机拍摄的视频打不开怎么办
  • 如何解决Redis中的热点key问题
  • Microsoft Azure Cosmos DB:全球分布式、多模型数据库服务
  • 设计模式--享元模式【结构型模式】
  • 【python】字符串元素的访问与截取
  • QT c++ 自定义按钮类 加载图片 美化按钮
  • LeetCode 3019.按键变更的次数:遍历(转小写)
  • selenium找不到元素解决方案-切换iframe