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: 把数组开大,不要受答案的影响,以为是小写字母