摘要:
给定数组arr和整数num, 共返回有多少个子数组满足如下情况:max(arr[i..j]) - min(arr[i..j]) <= nummax(arr[i..j])表示子数组arr[i..j]中的最大值, min(arr[i..j])表示子数组arr[i.中的最小值。【要求】如果数组长度为N, 阅读全文
摘要:
窗口内最大值最小值的更新结构(单调双向队列) 滑动窗口的最大值 窗口滑动的规则: L,R开始均指向数组的最左边,L < R, 窗口内增加元素:R向右走, 窗口内减少元素:L向右走 R和L均不能向后退,只能向前走 数组array 采用双端链表LingkedList(双端队列)(index(在数组中的位 阅读全文
摘要:
在一大堆数中求其前k大或前k小的问题 最坏时间复杂度为O(n)。 1.可以将数组排序,然后取出第k小的数 O(nlogn) 2.维护一个k大小的堆 O(nlogk) 3.一种比较简单的方法:采用荷兰国旗的partition解法,随机(int random = (int)(Math.random() 阅读全文
摘要:
T1是T2的子树 阅读全文
摘要:
在给定字符串末尾添加一个字符串,生成回文串,且回文串长度最短 可以求字符串包含到最右边的字符的最右回文右边界的中心,然后以此中心为基准,回文半径在左边不包含的部分加上即可 * 2111123 --> 2111123211112 * 32112 --> 321123 * 3211233 --> 321 阅读全文
摘要:
在末尾添加字符串,使其包含字符串两次,且长度最短 * 找出字符串的next数组,然后添加的部分就是字符串的最后一个字符的next值到最后一个位置的值,这是最大前缀和最大后缀相等的地方 * 注意这里要找的是字符串中后面字符和前面字符匹配的最长位置,所以这里的 next.length = str.len 阅读全文