摘要:
二叉树——二叉树的遍历(递归与迭代) Morris遍历 利用Morris遍历实现二叉树的先序, 中序, 后续遍历, 时间复杂度O(N), 额外空间复杂度O(1)。 如果一个结点有左孩子,则回到该结点两次,否则只回到一次,而且当第二次回到该结点时,左子树已经遍历完了 Morris遍历规则: 1.来到的 阅读全文
摘要:
京东笔试编程题:烽火台,动态规划解法| Hexo https://www.nowcoder.com/discuss/8704?type=0&order=0&pos=5&page=0 战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作。首都处于一个四面环山的盆地中 阅读全文
摘要:
求最大子矩阵的大小给定一个整型矩阵map, 其中的值只有0和1两种, 求其中全是1的所有矩形区域中, 最大的矩形区域为1的数量。例如:1 1 1 0其中, 最大的矩形区域有3个1, 所以返回3。再如:1 0 1 11 1 1 11 1 1 0其中, 最大的矩形区域有6个1, 所以返回6。 解:将其放 阅读全文
摘要:
定义二叉树节点如下: 一个数组的MaxTree定义如下。数组必须没有重复元素。MaxTree是一棵二叉树, 数组的每一个值对应一个二叉树节点。包括MaxTree树在内且在其中的每一棵子树上, 值最大的节点都是树的头。给定一个没有重复元素的数组arr, 写出生成这个数组的MaxTree的函数, 要求如 阅读全文
摘要:
解决的问题:在一个数组中,每一个位置的num,找到左边离num近的>num的值,和右边离num近的>num的值 时间复杂度:O(N) 准备一个栈:栈底到栈顶 从大到小 遍历数组,将数组中的元素num依次入栈,同时保证栈中的元素比num大,如果num大于栈中的元素,则将栈中的元素弹出,同时记录弹出元素 阅读全文
摘要:
给定数组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 阅读全文