原文:找出数组前N大的数

这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序 思路二:用最大堆的思想. 我暂时只实现了思路一,思路二我之后实现了会补上. 思路一比较简单了.我们先用快排的思想找出第n大的数,然后带上后面n 个就完事了.因为后面的都比支点数大. 怎么找第n大的数 我在之 ...

2014-12-03 20:40 0 2672 推荐指数:

查看详情

长为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
找出2n+1个中不成对的那个

问题定义:有2n+1个,只有一个单着,别的都是成对的,找出这个单着的。比如:2 1 3 2 1。3是答案。 思路一:暴力搜索——每个数都和其他比较,找不到相同的,就得到了结果。时间复杂度为o(n2) 思路二:排序搜索——先给序列排个序,之后从前往后一对一对的找,直到不是成对的为止 ...

Thu Apr 04 06:42:00 CST 2013 13 2320
给定一个长度为N数组找出出现次数大于n/2,n/3的,要求时间复杂度O(n),空间复杂度O(1)

  先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和。 在数组A中,我们定义两个数据集合a1,a2。a1为出现次数大于n/2的的集合,a2为其余数组成的集合。对于数组 A中元素a、b,假设a不等于b,那么有两种情况,分别为:a属于a1,b属于 ...

Fri Nov 01 04:59:00 CST 2019 0 300
n个无序数中找出第K大的

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

Wed Aug 07 01:02:00 CST 2019 1 1020
如何在10亿找出1000大的

1.排序方法 首先能想到的就是先排序,然后取1000个,或者部分排序,只排出1000个就行 缺点:这些方法的时间复杂度都比较高 2,分治法 可以使用分治法,这有点类似快排中partition的操作,随机选一个t,然后对整个数组进行partition,会得到两部分,一部分的 ...

Mon Nov 19 18:52:00 CST 2018 0 1396
N个自然的随机置换

来自:【数据结构与算法分析——C语言描述】练习2.7 问题描述:假设需要生成N个自然的一个随机置换。例如,{4,1,2,5,2} 和 {3,1,4,2,5} 就是合法的置换,但 {5,4,1,2,1} 却不是,因为1出现了两次而 3 缺没有。这个程序常常用于模拟一些算法 ...

Mon Sep 19 03:14:00 CST 2016 0 1977
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM