原文:找出2n+1个数中不成对的那个

问题定义:有 n 个数,只有一个单着,别的都是成对的,找出这个单着的数。比如: 。 是答案。 思路一:暴力搜索 每个数都和其他数比较,找不到相同的,就得到了结果。时间复杂度为o n 思路二:排序搜索 先给序列排个序,之后从前往后一对一对的找,直到不是成对的为止。时间复杂度,怎么也得o nlgn 思路三:异或计算,一趟搞定。时间复杂度o n 直接看思路三:原理:异或操作 对于位操作 相同为 ,相异为 ...

2013-04-03 22:42 13 2320 推荐指数:

查看详情

找出2n+1个数成对的那个(升级版)

上篇谈到了用异或来解决,确实是个好方法,时间复杂度为o(n),比例一遍ok,空间复杂度为o(1),只占用一个空间足矣。现在把这个问题升级下: (1)给出n个数,其中有且仅有一个出现了奇数次,其余的都出现了偶数次。用线性时间常数空间找出这个出现奇数次的 (2)给定n个数,其中有且仅有两个出现 ...

Fri Apr 05 07:38:00 CST 2013 8 1840
n个无序数找出第K大的

遇到题目为从n个无序数组找出第K大的,最开始想到的就是冒泡排序、选择排序等,每次找到一个最大(或最小)的,但是很明显需要时间复杂度为O(n*k)!具体代码细节参考findK_2 改进一点的算法有根据快速排序的思想,时间复杂度达到O(n)。想象一下,第k大,说明前面有k-1 ...

Wed Aug 07 01:02:00 CST 2019 1 1020
N个数的数组,找出个数的两个数,使得这两个数的和最接近0

N个数的数组,没有顺序。现在的问题是让你在数组找出个数,使得这两个数的和尽可能的接近0。 想到的的方法是尝试所有对<xi,xj>的组合,之后找出其中和的绝对值最小的对即可。但是这样做的时间复杂度是O(N^2),有没有更快一点的方法呢? 这里给出一个O(NlogN ...

Sat Oct 13 04:21:00 CST 2012 4 4112
长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素

思路:如果限制空间复杂度为O(1),我们就无法采用哈希表的方法去求解。题目中数组中所以数字都在范围[0, N-1],因此哈希表的大小为N即可。因此我们实际要做的就是对N个范围为0到N-1的进行哈希,而哈希表的大小刚好为N。对排序算法比较熟悉的同学不难发现这与一种经典的排序算法——基数排序非常类似 ...

Mon Jul 16 18:07:00 CST 2018 0 877
[面试题]在数组找出3个数使得它们和为0

给定一个数组S,试找出3个数a, b, c,使得a+b+c=0。也即从集合找出所有的和为0的3个数。 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对: (-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)与(-1,0,1)算同一个解 ...

Fri Jul 07 07:47:00 CST 2017 2 3658
(算法)从10000个数找出最大的10个

  从10000个整数找出最大的10个,最好的算法是什么? 算法一:冒泡排序法   千里之行,始于足下。我们先不说最好,甚至不说好。我们只问,如何“从10000个整数找出最大的10个”?我最先想到的是用冒泡排序的办法:我们从头到尾走10趟,自然会把最大的10个数找到。方法简单,就不再这里写 ...

Thu Mar 21 05:10:00 CST 2013 10 19235
如何找出个数第二大的

思路分析: 可以只通过一遍扫描数组即可找出数组第二大的,即通过设置两个变量来进行判断。首先定义一个最大变量来存储数组的最大值,初始值为数组首元素;另一个是第二大变量,用来存储数组的第二大,因其一定不能超过数组的最大值,所以初始值可设为最小负整数-32767,然后遍历数组元素。如果数组 ...

Wed Mar 12 19:47:00 CST 2014 2 2930
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM