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

【每日一句】只出现一次的数

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:位运算
  • 其他语言
    • C
    • python3
  • 写在最后

Tag

【位运算-异或和】【数组】【2023-10-14】


题目来源

136. 只出现一次的数字


题目解读

给你一个数组,找出数组中只出现一次的元素。题目保证仅有一个元素出现一次,其余的元素都是出现两次的。

要求解题方法的时间复杂度为线性的,空间复杂度为常数级别。


解题思路

如果不考虑时间复杂度与空间复杂度,本题有多种解决方法,比如哈希表记录每个元素出现的次数;比如使用集合记录元素,如果遇到第二次个元素,则从集合中移除遍历到的元素,最后集合中剩余的就是仅出现一次的元素。还有一种方法就是将数组中的元素全部放入集合中,利用集合来去重,集合中的数都是出现过一次的数,现在将集合中元素和的二倍减去数组中元素和,得到的结果就是数组中仅出现一次的元素。

本题的最优解法是位运算的方法。

方法一:位运算

本题利用的是位运算的异或和知识,我们知道:

  • 两个相同的数的异或和为 0
  • 任何数与 0 异或,结果不变;
  • 异或操作具有交换性。

利用以上异或和的三条性质,我们可以这样解决本题:

  • 维护一个结果变量 res,初始值为 0
  • 遍历数组中的所有元素,与 0 进行异或操作,相同元素之间的异或和为 0,最后只剩下 0 数组中的出现过一次的数异或,得到的就是数组中的出现过一次的数;
  • 返回 res

实现代码

class Solution {
public:int singleNumber(vector<int>& nums) {int res = 0;for (int num : nums) {res ^= num;}return res;}
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1)


其他语言

C

int singleNumber(int* nums, int numsSize){int res = 0;for (int i = 0; i < numsSize; ++i) {res ^= nums[i];}return res;
}

python3

class Solution:def singleNumber(self, nums: List[int]) -> int:ret = 0for i in nums:ret ^= ireturn ret

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

http://www.lryc.cn/news/192890.html

相关文章:

  • GDB调试程序常用命令
  • C语言,求两个数的二进制表达中,有多少个位数不同
  • 解决Win10电脑无线网卡的移动热点无法开启问题
  • Spring framework Day10:JSR330注入注解
  • Java开发中List数据量大,需要分片批次处理
  • Apache Doris 2.0.2 版本正式发布!
  • transformers架构实现
  • C++类型推导
  • Open3D(C++) SVD分解求两个点云的变换矩阵
  • rtmp htttp推流Windows桌面到srs进行播放
  • NSSCTF做题(9)
  • 【09】基础知识:React组件的生命周期
  • Pytorch之ConvNeXt图像分类
  • Linux系统编程:makefile以及文件系统编程
  • 《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现
  • 写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换
  • Zabbix监控系统详解2:基于Proxy分布式实现Web应用监控及Zabbix 高可用集群的搭建
  • docker 安装oracle
  • C++ vector 自定义排序规则(vector<vector<int>>、vector<pair<int,int>>)
  • 机器学习 Q-Learning
  • 产品设计心得体会 优漫动游
  • 前端--CSS
  • 实操指南|如何用 OpenTiny Vue 组件库从 Vue 2 升级到 Vue 3
  • 系统架构设计:15 论软件架构的生命周期
  • 金山wps golang面试题总结
  • 计算机视觉实战--直方图均衡化和自适应直方图均衡化
  • 501. 二叉搜索树中的众数
  • 【Linux】常用命令
  • 机器人制作开源方案 | 齿轮传动轴偏心轮摇杆简易四足
  • Windows中将tomcat以服务的形式安装,然后在服务进行启动管理