查找最大或最小的 N 个元素】的更多相关文章

一. deque(双端队列) 1. 使用 deque(maxlen=N)会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉 >>> from collections import deque >>> q = deque(maxlen=) >>> q.append() >>> q.append() >>> q.append() >>> q deque([, , ]…
一.怎样从一个集合中获得最大或者最小的 N 个元素列表? heapq 模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题. import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, nums)) # Prints [42, 37, 23] print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2] #前面的参…
使用内置的heapd模块 In [1]: import heapq In [2]: nums = [1,8, 2, 23, 7, -4, 18, 23, 42, 37, 2] In [3]: print(heapq.nlargest(2,nums)) [42, 37] In [4]: print(heapq.nlargest(5,nums)) [42, 37, 23, 23, 18] In [5]: print(heapq.nsmallest(5,nums)) [-4, 1, 2, 2, 7]…
5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学过查找第k小的元素的O(n)算法 试着实现了一下: 注意new 初始化二维数组的方式 int (* a)[5] = new int[8][5]; /* 5.查找最小的 k 个元素(数组) 题目:输入 n 个整数,输出其中最小的 k 个. 例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,…
紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4. 看到题目的时候我第一反应,这题很简单,使用任何方式的排序将数列按顺序存储,之后遍历需要的k个元素即可,于是自己动手很容易就完成了,但是后来在网络上发现很多人对这题的解决方式是用小根堆(MinHeap)或者大根堆(MaxHeap),这才意识到,其实出题人是醉翁之意不在酒,在乎复杂度的考虑也.…
查找最小的K个元素,使用最大堆,具体代码如下: #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; void swap(int *a, int *b) {     int temp;     temp = *a;     *a = *b;     *b = temp; } void heap_adjust(int *a, int i, int size) {     int lchild = 2 *…
查找最小的k个元素 题目:输入n个整数,输出其中最小的k个. 例如输入1, 2, 3, 4, 5, 6, 7和8这八个数字,则最小的4个数字为1, 2, 3和4. 分析:这道题最简单的思路是把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数.只是这种思路的时间复杂度为O(nlogn),这当然还有更快的思路. 可以开辟一个长度为k的数组,每次从输入的n个整数中读入一个数,如果数组中已经插入的元素个数少于k个,则将读入的整数直接放到数组中.否则长度为k的数组已经满了,不能再往数组里插入元素…
Top N问题在搜索引擎.推荐系统领域应用很广, 如果用我们较为常见的语言,如C.C++.Java等,代码量至少也得五行,但是用Python的话,只用一个函数就能搞定,只需引入heapq(堆队列)这个数据结构即可.今天偶然看到这个库,特意记下之. 先看一个例子: >>> import heapq >>> nums = [1,8,2,23,7,-4,18,23,42,37,2] >>> print heapq.nlargest(3, nums) [42,…
看完两个求最大值算法之后的一些感想. 如果想直接看算法的可以跳过.但是我觉得我这些想法还是比较有用的,至少对我将来的算法设计是这样的. 算法的功能越强大,必然意味着速度慢,因为根据丛林法则,那种慢又功能少的算法会被淘汰. 所以,(注意了!!),如果我们在使用一个算法的时候感觉到它造成的结果满足我们的使用,而且超出了,我们的使用,那么我们就很可能浪费了时间,降低了效率. 例如这个1000个数中求最大的10个的算法: 如果排序,取前10个.发现后面的白排序了,根本没用到.参照加粗行,也许可以有更快的…
怎么从一个集合中获取最大或最小的N个元素列表? heapq模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题. In [39]: import heapq In [40]: nums = [2, 5, 3, 4] In [41]: heapq.nlargest(2,nums) Out[41]: [5, 4] In [42]: heapq.nsmallest(2,nums) Out[42]: [2, 3] 两个函数都能接受一个关键字参数,用于更复杂的数据结构中:…