【剑指Offer】I. 数组中数字出现的次数
发布日期:2022-02-10 08:55:19 浏览次数:30 分类:技术文章

本文共 841 字,大约阅读时间需要 2 分钟。

题目

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

思路

真的是失忆症患者了,这道题以前做过但竟然一点思路都没有。

要考虑到位运算的用途:

异或操作的性质:对于两个操作数的每一位,相同结果为 0,不同结果为 1。那么在计算过程中,成对出现的数字的所有位会两两抵消为 0,最终得到的结果就是那个出现了一次的数字。

题解:

代码

class Solution {public:    vector
singleNumbers(vector
& nums) { int a = 0; int b = 0; int c = 0; int n = 1; for(int i = 0;i < nums.size();i++){ c = c ^ nums[i]; } //此时,c = a ^ b; //找出c的二进制中第一个不为0的位,这里用的方法是比较数一次左移一位 while ((n & c) == 0) n <<= 1; for(int i = 0;i < nums.size();i++){ if(n & nums[i]){ //比较n的那一位(唯一的一个1)跟nums[i]的那一位是否一样,一样就分到一个组 a = a ^ nums[i]; }else{ b = b ^ nums[i]; } } return vector
{a,b}; }};

 

转载地址:https://blog.csdn.net/hanmin822/article/details/106052758 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指Offer】I. 二叉树的深度
下一篇:【剑指Offer】II. 平衡二叉树

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月27日 01时11分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【Leetcode刷题篇】leetcode26 删除排序数组中的重复项 2019-04-26
【大话Java面试】-如何通俗易懂的理解Redis的分布式寻址算法hash slot? 2019-04-26
【大话Java面试】-如何通俗易懂的理解单例模式? 2019-04-26
【大话Java面试】请列出Java中几个常用的设计模式? 2019-04-26
【大话Java面试】-如何通俗易懂的理解Java异常以及Java异常处理? 2019-04-26
【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类? 2019-04-26
【大话Mysql面试】-如何通俗易懂的了解Mysql的索引最左前缀匹配原则 2019-04-26
【大话Mysql面试】-MYSQL的两种存储引擎MyISAM与InnoDB的区别是什么? 2019-04-26
【大话Mysql面试】-InnoDB可重复读隔离级别下如何避免幻读?MVCC和next-key是什么 2019-04-26
【大话Mysql面试】-Mysql如何恢复数据?如何进行主从复制?Binlog日志到底是什么? 2019-04-26
理解String.intern()和String类常量池疑难解析例子 2019-04-26
python flask打造前后端分离的口罩检测 2019-04-26
【大话Mysql面试】-MySQL基础知识 2019-04-26
【大话Mysql面试】-MySQL数据类型有哪些 2019-04-26
【大话Mysql面试】-MySQL数据引擎 2019-04-26
【大话Mysql面试】-常见SQL语句书写 2019-04-26
【大话Mysql面试】-SQL语句优化 2019-04-26
【大话Mysql面试】-Mysql事务以及隔离级别 2019-04-26
【大话Mysql面试】-Mysql索引 2019-04-26
【大话Mysql面试】-Mysql锁 2019-04-26