n numbers get max and min, smallest compare times for worst case

这道题目是N个数,求max 和min 似乎是 非常简答的题,而且渐进时间复杂度也没有优化的空间,
但是从常数角度,或者说比较次数来说还是有个优化的 技巧的

n个数 求max是比较n-1次(最坏)

2n个数 返回最大 最小本来是2n级别(考虑n的常数项了)的比较次数,但是现在一种做法可以优化到3/2*n的比较次数

以n偶数为例
先选出两个数作为当前最大,最小,比较一次,1
然后剩下划分成两半,分别比较出两者中较大的,和较小的,(n-2)/2
然后大的和max比,小的和min比,各(n-2)/2次
所以总次数3/2 (n-2) +1= 3/2n-2次

n为奇数
3/2*n -3/2=3/2(n-1) 或者说C++代码3/2n

今天学神说找max 和second max 是 n+logn+1次比较次数,最优的,

生成一颗二叉比较树

richard 2014/12/25 22:22:18
max需要n次

richard 2014/12/25 22:22:52
然后生成一条max的路径 secondmax一定是路径上兄弟结点 一共log n个

因此一共是n+logn级别的 比较次数

palindromeI: s忘记作为全局参数传递了,定义s_=s;
dp[0]=1; 因为空字符串是可以分割为回文的

palindromeII:忘记定义dp 和G 数组

longestsubstring: 把数组开大,不要受答案的影响,以为是小写字母

Posted by richard爱闹 - 12月 25 2014
如需转载,请注明: 本文来自 Richard