#include #include #ifdef __linux
#include #endif
// MINIMUM(A)
// MIN = A[1]
// for i = 2 to A.length
// if min > A[i]
// min = A[i]
// return min int...
分类:
编程语言 时间:
2015-02-09 21:26:03
阅读次数:
373
http://acm.hdu.edu.cn/showproblem.php?pid=4908题意:求一个[1,N]的全排列中以M为中位数的子序列的个数思路:隔了好久填个坑...当初理解错题意了一开始直接写了个二重循环来扫直接TLE了...搜了下才想到该怎么用一重解决...代码: 93MS 1524K...
分类:
其他好文 时间:
2015-02-03 06:56:46
阅读次数:
187
问题:当给定存在静态表(如数组)中的n个元素,如何快速找到其中位数、最小值、最大值、第i小的数?
首先想到的方法是先对数组元素进行排序,然后找到第i小的元素。这样是可行的,但比较排序最快也需要O(nlgn),能否在线性时间内解决呢。这就是随机的分治法—随机选择。
思想:利用随机划分(在快速排序中介绍过)找到主元r,这样就将小于等于r的元素放在了其左边,大于r的元素放在了其右边。这...
分类:
编程语言 时间:
2015-02-02 23:09:19
阅读次数:
213
//poj 3016 K-Monotonic//分析:与2005年集训队论文黄源河提到的题目类似,给定序列a,求一序列b,b不减,且sigma(abs(ai-bi))最小。//思路:去除左偏树(大根堆)一半的节点(向上取整),让左偏树的根节点上存放中位数;每个左偏树的根节点表示一个等值区间//在本题...
分类:
其他好文 时间:
2015-02-01 23:07:17
阅读次数:
299
在查找中位数时,我们可以先排序,再找中间位置的数值即可,这样时间复杂度是O(nlbn). 参考快速排序的分割算法,我们可以得到O(n)复杂度的算法。 首先,把问题推广到查找第k小的数,每次分割之后,我们只需要在pivot的一侧查找即可。 1 #define swap(a, b) do ...
分类:
其他好文 时间:
2015-02-01 16:00:10
阅读次数:
178
【题意】给出n(1~250000)个数(int以内),求中位数【题解】一开始直接sort,发现MLE,才发现内存限制1024k,那么就不能开int[250000]的数组了(4*250000=1,000,000大约就是1M内存)。后来发现可以使用长度为n/2+1的优先队列,即包含前一半的数以及中位数,...
分类:
其他好文 时间:
2015-01-28 23:55:11
阅读次数:
217
题目链接:BZOJ - 1303题目分析首先,找到 b 的位置 Pos, 然后将数列中小于 b 的值赋为 -1 ,大于 b 的值赋为 1 。从 b 向左扩展,不断算 Sum[i, b - 1] ,然后将 Cnt[Sum[i, b - 1]] 加一,这样就算出每个左边的Sum值有多少个了。然后从 b ...
分类:
其他好文 时间:
2015-01-26 08:47:46
阅读次数:
136
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.思路比较简单,就是每次以中位数为根节点,然后左边即左子树,右边是右子树,递归下去即可超时代码(不知道为啥)...
分类:
其他好文 时间:
2015-01-23 19:56:34
阅读次数:
202
题意。
1000个case
每个case
输入若干个数,对第k个输入,如果k为奇数,则输出前k个数的中位数
那么这就是动态求中位数了
实现的思路也比较简洁
用两个堆, 大顶堆和小顶堆
每次输入一个数,如果这个数比当前的中位数大,就存入小顶堆中, 否则就存入大顶堆。
然后调整, 小顶堆元素的个数要等于大顶堆的元素个数,或者比其多1。
如果小顶堆的元素太多,就...
分类:
其他好文 时间:
2015-01-23 18:24:23
阅读次数:
125
Google面试题股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值)。SOLUTION 1:1.维持两个heap,一个是最小堆,一个是最大堆。2.一直使maxHeap的size大于minHeap.3. 当两边si...
分类:
编程语言 时间:
2015-01-23 08:19:44
阅读次数:
5176