【剑指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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.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
理解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