准备面试的时候新认识了一些算法,把这些算法记录下来。
BFPRT算法:
在快排选取pivot值时,pivot取值为:
(1)将输入数组的n个元素划分为n/5组,每组5个元素,且至多只有一个组由剩下的n%5个元素组成。
(2)寻找n/5个组中每一个组的中位数,首先对每组的元素进行插入排序,然后从排序过的序列中选出中位数。
(3)对于(2)中找出的n/5个中位数,递归进行步骤(1)和(2),直到只剩下一个数即为这n/5个元素的中位数,找到中位数后就可以把pivot值。
Manacher算法:
要求在字符串中找最大回文子串。
步骤,先在两个相邻字符中间加‘#’,设置id和mx。p[i]标识第i个位置单边最长回文长度。
当mx>i时,有p[i]>=min(p[2*id-i],mx-i)。可大幅降低时间复杂度。