- 月赛
- 2012-11-25 22:21:00 @
第K大(P1788):
求一个序列的第k大元素,只需要排序即可。复杂度为O(nlogn)。但是实际上这道题有还一种经典的期望O(n)做法。这种做法基于快排的思想。我们知道快排每次会选择一个元素,然后将小于它的元素放于左侧,大于它的元素放于右侧,然后分别递归进行。由于我们可以判断出第k大的元素在左侧还是右侧,所以我们只需要递归一侧就行。这样复杂度就降至了期望O(n+n/2+n/4+n/8..)≈O(2*n)≈O(n)。
string(P1789):
这道题目的实现相对简单,主要考察选手的分析能力。
我们将分以下几种情况来分析:
1、K=1,显然答案为m^n。
2、K>N,不存在长度为K的子串,所以无论如何都满足条件,答案为m^n。
3、K=N,即字符串本身为回文串,我们有一半的字符可以任意安排,答案为m^((n+1)/2)。
4、1
1 条评论
-
Charlesgao LV 8 @ 2013-02-16 08:25:42
拓扑编号(P1790)除了堆优化还需要哪些优化?大数据TLE
- 1