面试题40:数组中只出现一次的数字
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
题目分析
剑指Offer(纪念版)P211
① 自己与自己异或为0
② 0与数A异或为A
③ 异或满足交换律
代码实现
void FindNumsAppearOnce(int data[], int length, int* num1, int* num2)
{if (data == NULL || length < 2)return;int resultExclusiveOR = 0;for (int i = 0; i < length; ++ i)resultExclusiveOR ^= data[i];unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR); *num1 = *num2 = 0;for (int j = 0; j < length; ++ j){if(IsBit1(data[j], indexOf1))*num1 ^= data[j];else*num2 ^= data[j];}
}// 找到num从右边数起第一个是1的位
unsigned int FindFirstBitIs1(int num)
{int indexBit = 0;while (((num & 1) == 0) && (indexBit < 8 * sizeof(int))){num = num >> 1;++ indexBit;}return indexBit;
}// 判断数字num的第indexBit位是不是1
bool IsBit1(int num, unsigned int indexBit)
{num = num >> indexBit;return (num & 1);
}
转载于:https://www.cnblogs.com/xwz0528/p/4896200.html
面试题40:数组中只出现一次的数字相关推荐
- 剑指offer面试题[40]-数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 注意原题目要求空间复杂度为0(1). 位运算的具体思路可以参看剑指offer. class So ...
- 【剑指offer-Java版】40数组中只出现一次的数字
数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...
- 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字
剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...
- 40:数组中只出现一次的数字
/*** 面试题40:数组中只出现一次的数字* 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ public class _40_num_one_ti ...
- 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字
一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...
- [剑指offer] 数组中只出现一次的数字
本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...
- 牛客题霸 [数组中只出现一次的数字] C++题解/答案
牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...
- 数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 数字都出现两次,则异或肯定为0. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出 ...
- 【剑指offer】面试题40:数组中只出现一次的数字
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为只有两个只出现一次的数字,所以所有数字进行异或之后得到值res一定不是0.这样,res ...
最新文章
- ios UIImage 圆形图片剪切方案
- Enhancement spot 增强点简介
- php header运用细节
- 数据切分——Atlas介绍
- c语言所有关键字作用,void_C语言void关键字详解
- 修改eclipse默认编码方式
- Android WebView https白屏、Http和Https混合问题、证书配置和使用
- 设计模式学习笔记——责任链(Chain of Responsibility)模式
- Mysql5.5 慢查询 trace的配置(转,针对5.5)
- 【华为云技术分享】华为云文档数据库服务DDS监控告警全新优化
- *args, **kwargs
- Linux环境下实现简单进度条
- python颜色大全
- 一、Multisim软件介绍
- 什么是互联网、以太网、广域网、局域网?
- 计算机也无法解的函数,XP提示“无法访问函数不正确”怎么办|XP提示“函数不正确”的四种解决方案...
- tegra3 CPU auto hotplug和Big/little switch工作的基本原理
- 【第五人格设计思路】囚徒“蝰”·时装设计思路
- 电脑怎么安装excel表格
- JavaScript期末大作业 罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有首页视频
热门文章
- 达尔文进化奖_使用Kydavra GeneticAlgorithmSelector将达尔文进化应用于特征选择
- 实例分析objdump反汇编用法
- 房贷利率一涨再涨,为什么排队买房的越来越多?
- 银行假流水怎么识破?
- H.264码流解析 一个SPS的nalu及获取视频的分辨率
- 小米蓝牙左右互联_解决不同品牌智能家居的兼容问题,小米米家智能多模网关发布...
- jquery上传图片_文件上传三种方式
- 利用python制作漂亮的词云图_利用python制作漂亮的词云图
- [FY20 创新人才班 ASE] 第 1 次作业成绩
- Windows 聚焦的锁屏壁纸设置为桌面壁纸