经典面试题-数组中只出现一个的数(1)

【题目】:给你一个数组,只有一个数出现过一次,其他的数字都出现两次。求只出现过一次的那个数。

【解析】:这个题算是比较经典的了,在这个题的基础上有很多变种,后续会一一总结。

首先分析这个问题要求的是出现过一次的那个数字,其他的是我们不需要的,我们要想办法消除。

分析其他数字我们发现,他们有一个共同的特点就是出现过两次,从而我们可以想到可以通过异或来处理。

因为异或相同为0,不同为1。两个相同的数字异或为0,同时异或有传递性,可以保证我们想要的那个出现过一次

的数字,通过对所有数字异或可以得到。

时间: 2024-10-08 13:30:33

经典面试题-数组中只出现一个的数(1)的相关文章

经典面试题-数组中出现次数超过一半的数

[题意]:数组中有一个数字出现超过半数以上,找出这个数字. [解析]:一个数字超过半数以上,这是本题仅有的条件,所以,我们要从这个条件入手. 数字超过半数有什么特性呢?首先这个数字肯定是这些数的中位数.所以可以排序,然后找中位数. 但是时间复杂度为排序的O(n*logn),还可以再快吗? 现在有这么一个思路,我们知道,要求的这个数超过半数,那么两个不同的数我们消除,相同的累加, 最后一定能剩下那个超过半数的数字. 具体操作:用一个变量用来存当前剩下的数字,用一个变量做计数器.每次比较数字是否相同

程序典型面试题---数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 解法:位异或运算 思路:将问题简化为除了一个数字外,其他数字都出现两次.将数组的结果异或起来,因为出现两次的数组异或结果为0,所以结果异或的结果即为出现一次的数据. 题设的问题将数组分为两组,每组异或的结果即为要求的只出现一次的一个数字.问题的关键是怎么分组刚好能使得两个只出现一次的两个数字位于不同的组,那些出现两次的数字的两次都在相同的组中. 解法

【白话经典算法系列之十七】 数组中只出现一次的数 其他三次

本文地址:http://blog.csdn.net/morewindows/article/details/12684497转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/MoreWindows 首先看看题目要求: 数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次.请给出最快的方法找到x. 这个题目非常有意思,在本人博客中有<位操作基础篇之位操作全面总结>这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x.有<

剑指Offer 面试题40:数组中只出现一次的两个数 题解

面试题40:数组中只出现一次的两个数 提交网址:  http://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=13&tqId=11193 或 http://ac.jobdu.com/problem.php?pid=1351 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 牛客网OJ的输入输出接口是:void Fin

剑指offer——面试题40:数组中只出现一次的数字

题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: (1)首先考虑数组中若是只有一个数字是出现一次,其他都是出现两次的情况,在这种情况下,将所有的 数字都位异或运算(^),因为相同的数字异或结果为0,所以最后地到的结果就是那个出现一次的数. (2)下面考虑本题出现有两个出现一次,其他的都是出现一次,这种情况下,可以将所有的异或一遍, 那么最后得到的结果为这两个出现一次的数的异或的结果. 然后找到这个数的从右为0数起的第一个不为0的位,这样

【剑指Offer学习】【面试题40:数组中只出现一次的数字】

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 举例说明 例如输入数组{2, 4, 3, 6, 3, 2, 5 },因为只有4 .6 这两个数字只出现一次,其他数字都出现了两次,所以输出4和6 . 解题思路 这两个题目都在强调一个(或两个)数字只出现一次,其他的出现两次.这有什么意义呢?我们想到异或运算的一个性质:任何一个数字异或它自己都等于0.也就是说, 如果我们从头到尾依次异或数组中的每一个数

求一个数组中只出现一次的数字

/* 求一个数组中只出现一次的数字(注:只针对数组中有两个数不同,且其他数字两两相同) 题目:一个整型数组里除了两个数字出现一次外,其他的数字都出现了两次:求出现一次的数字: 如:数组a[]={2,4,3,6,3,2,5,5};执行程序后应输出4和6:因为4,6只在该数组中出现了一次 思路:两个数字相同其异或结果一定为0,先异或->再分组-->再对每个子序列异或 算法: 1. 先对数组的每一个元素进行异或操作,求结果(本质就是对那两个不同的数的异或,即4^6=0010) 2.根据异或的操作结果

数组中只出现一次的数据

题目来源:<剑指offer>面试题40 题目:一个整形数组除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度O(n),空间复杂度O(1) 分析:运用异或的思想.我们从头到尾一次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果.因为其他数字都出现了两次,在异或中全部抵消了.由于这两个数字肯定不一样,那么异或的结果肯定不为0,也就是说在这个结果数字的二进制表示中至少就有一位为1.我们在结果数字中找到第一个为1的位的位置,记为第n

【01】数组中只出现一次的数字

其他两次,一个一次/其他三次,一个一次/其他两次,两个一次 ============================================ 任何一个数字异或他自己都得零. 注意异或运算的初始化变量为0,因为0异或任何数字都得那个数字自身. Single Number 1.一个整型数组中除了一个数字之外,其他数字都出现了两次 ,找出这个出现一次的数字. 解法一,异或是重复的消失,剩下的就是要找的数字. C++ Code 12345678910111213   int singleNumb