剑指Offer——数组中只出现一次的数字
题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
分析:
数组中一共有偶数个数。两个数字只出现过一次。
相同数异或在一起等于0,那么将所有数异或最后结果就是只出现过一次的数异或在一起的结果。
那么我们找到结果中的某一位的bit位为1,将整个数组按照该位为0和1分成两组,
肯定可以分成两组,因为如果没有0组的话,那么数组就只可能有奇数个数;没有1组的话,那么结果不可能得到该位为1。
两组内分别进行异或,得到两个结果,这两个结果就是只出现过一次的数。
代码:
class Solution {
public:
void FindNumsAppearOnce(vector<int> data, int* num1, int *num2) {
int dataSize = data.size();
int xorVal = ;
for(int i = ; i < dataSize; i++) xorVal ^= data[i]; // 得到两个只出现过一次的数异或的结果
int n = ;
while(xorVal) { // 找到结果中的某一bit位是1
if(xorVal & == ) break;
xorVal >>= ;
n <<= ;
}
*num1 = *num2 = ;
// 按照刚刚找到的是1的bit位,把数分为两组,一组为1,一组为0,每组内部进行异或就可以得到两个结果,这两个结果就是那两个只出现过一次的数
for(int i = ; i < dataSize; i++) {
if(data[i]&n) *num1 ^= data[i];
else *num2 ^= data[i];
}
}
};
剑指Offer——数组中只出现一次的数字的更多相关文章
- 剑指Offer 数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为有2个数字只出现了一次,而其他的数字都是2次,可以通过异或运算,得到最后这2个只 ...
- 剑指Offer——数组中只出现一次的数字(一个很帅的异或解法)
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 看题目脑子里就出现做法了: 遍历,用个HashMap来记录出现的次数,然后再遍历HashMap返回 ...
- 用java刷剑指offer(数组中只出现一次的数字)
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 牛客网链接 思路 链接:https://www.nowcoder.com/questionTer ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- 剑指Offer-40.数组中只出现一次的数字(C++/Java)
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 分析: 我们知道,两个相同的数字异或的结果等于0,所以利用这个性质将数组中所有的数字异或,求得的结 ...
- 剑指offer--35.数组中只出现一次的数字
时间限制:1秒 空间限制:32768K 热度指数:198150 本题知识点: 数组 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. class ...
- 剑指 Offer —— 数组中重复的数字
数组中的重复数字 题目描述 牛课网链接 长度为 n 的数组里,所有数字都在 0 到 n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一 ...
- 剑指offer 数组中重复的数
在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的数组{ ...
- 剑指offer——数组中出现次数超过一半的数字(c++)
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
随机推荐
- js in
定义: in操作符用来判断某个属性属于某个对象,可以是对象的直接属性,也可以是通过prototype继承的属性.(参见hasOwnProperty) 注意事项: n 对于一般的对象属性 ...
- 生产者和消费者问题学习以及Java实现
在计算机领域中,生产者-消费者问题(也叫bounded-buffer问题)是一类很经典的多进程同步问题.该问题描述了两类进程,即生产者进程和消费者进程,它们共享一个固定大小的缓冲区作为队列.生产者的任 ...
- C语言 · 三角形面积
算法提高 三角形面积 时间限制:1.0s 内存限制:256.0MB 问题描述 由三角形的三边长,求其面积. 提示:由三角形的三边a,b,c求面积可以用如下的公式: s=(a+b+c ...
- 示例 - 如何在Console应用程序中应用SpiderStudio生成的DLL?
以前面生成的XML/JSON互转DLL为例, 我们写一个Console Appliction来做这件事情, 步骤如下: 1. 创建Console Project 2. 引入www.utilities_ ...
- 解决异常:Package should contain a content type part [M1.13]
http://blog.csdn.net/llwan/article/details/8890190 ————————————————————————————————————————————————— ...
- METIS 安装过程
官网下载包 yum -y instll gcc yum -y install gcc* yum -y install cmake 环境Python2.7.3 创建/home/Python/metis ...
- 29Spring_Autowriter的一些疑惑(很重要)
我用一个Autowriter去注解一个属性,而且我没有在Spring的配置文件中的bean.xml中注册bean(<bean id=""...);那么这个注解有用吗?答案是不 ...
- Android 开发之环境搭建-0
Android 开发环境安装与配置 一.开发工具介绍 要进行Android应用程序开发,最起码要有两个工具,一个是Android SDK,它不仅为开发人员提供了丰富的编程接口,而且提供了相关的调试工具 ...
- ie中自动识别单屏与双屏(js)
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- php 将一个字符串分割为组成它的字符
问: php里如何将一个字符串分割为组成它的字符? 比如hello -> [h, e, l, l, o] 以下有三种方法: 这是需要被分割的字符串: $str = 'Hello小样'; ...