解题报告
文章平均质量分 70
Yeehok
一个有梦想的Coder
展开
-
[解题报告]LFU Cache
题目链接题目要求使用O(1)的Get、Put方法实现LFU缓存LFU缓存是基于LRU缓存的一个优化,使用频次优化元素命中情况,进一步提高命中率,其余概念不再赘述基本思路:使用一个双端链表+两个HashMap实现双端列表存储原始数据、数据在HashMap的key、数据的访问频率第一个HashMap与LRU的实现类似,存储Key对应链表元素指针,以O(1)的效率定位元素第二个HashMap...原创 2020-04-17 16:35:41 · 393 阅读 · 0 评论 -
[解题报告]LRU Cache
题目链接题目要求实现一个大小为Capacity,操作复杂度在O(1)的缓存列表,缓存规则:1 放入数据,并且无论是覆盖放入还是新增的放入,均认为其是最新的数据2 取得数据,并且若获取成功,则认为它是最新被取得过的数据3 与规则中“最新”的概念相对应“最旧”概念,若放入数据时缓存列表超过上限Capacity,则需要移除一个“最旧”的数据基本思路:LRU cache,使用一个双端链表+has...原创 2020-04-17 11:24:20 · 163 阅读 · 0 评论 -
[解题报告]Maximum Product of Splitted Binary Tree
题目链接给定一棵二叉树,要求移除一个边,使得剩余两颗二叉树之和的乘积最大首先求出以每个点为根节点的和,将这个和赋给该点的Val其次遍历二叉树,尝试切除每一条边,查看切除后剩余两颗树之和的差值,该差值越小则乘积越大Runtime: 116 ms (beats 90.1%)Memory Usage: 17.1 MBfunc maxProduct(root *TreeNode) int {...原创 2020-03-26 23:05:53 · 175 阅读 · 0 评论 -
[解题报告]Jump Game V
题目链接给定一个表示高度的数组,每一个位置i都有一个高度arr[i]给定自然数d,每次跳跃允许在i位置周围[i - d, i + d]内进行每次跳跃仅仅允许跳到比自己低并且没有更高阻挡的目标位置即当i<k<j且对于所有的k,arr[k]<arr[i],i可以跳到j问从任意点出发最远能跳几次贪心即可,假设有N个位置,遍历N次,每次寻找一个未遍历过的最低点i遍历该点周围...原创 2020-03-24 22:18:03 · 115 阅读 · 0 评论 -
[解题报告]Jump Game IV
题目链接给一个数组,以0为起点出发,经过一定决策的跳跃,问最短到达len-1位置的代价每次跳跃代价1单位时间你可以向相邻的位置跳跃,也可以跳到在数组中具有相同值的位置注意任何时候不允许跳出数组BFS解决即可注意寻找下一步策略使用优于O(N)的方法解决,提高算法执行效率使用Go的HashMap可以实现常数级的后继节点查找开始搜索前需要预处理func minJumps(arr []i...原创 2020-03-24 22:04:49 · 135 阅读 · 0 评论 -
[解题报告]Maximum Students Taking Exam
题目链接给定一个教室图,“.”表示有一个座位,“#”表示没有座位要求座位左前、右前、左边、右边四个方向座位均无人时才可坐下求给定教室最多能坐几个人状态压缩动态规划,因为每个座位是否可坐取决于当前排和前一排,因此对每排座位布局进行状态压缩数据范围8 * 8,所以最多2 ^ 8 = 256种状态状态转移方程:dp[i][j] = max(dp[i][j], dp[i - 1][k] + ...原创 2020-03-21 22:35:33 · 169 阅读 · 0 评论 -
[解题报告]Number of Substrings Containing All Three Characters
题目链接给定一个字符串,包含且仅包含小写a、b、c。求出所有同时包含a、b、c的子串数量。观察可知若 [0, n) 串中若 [a, b] 区间为至少包含a、b、c的最小子串,那么包含 [a, b] 的所有子串组合均满足题目要求,即 (a + 1) * (n - b) 种满足要求的答案。举例来说abccba一共有7个子串满足要求(abc、abcc、abccb、abccba、cba、ccba...原创 2020-03-18 16:26:12 · 170 阅读 · 0 评论 -
[解题报告]Maximum Sum BST in Binary Tree
题目链接寻找和最大的二叉排序树先预处理计算以每个节点为根节点的求和值计算以每个节点为根节点的树是否为二叉排序树寻找最大即可func maxSumBST(root *TreeNode) (ans int) { dump := make(map[*TreeNode]bool) summary := make(map[*TreeNode]int) var dfsBST func(no...原创 2020-03-15 21:05:50 · 116 阅读 · 0 评论 -
[解题报告]Frog Position After T Seconds
题目链接从源点1跳到目标点target,给定秒数t秒,每次跳跃消耗1s每次跳会从可以到达的若干点随机跳到一个节点可以到达被定义为未跳过的节点,因为是树结构,所以不会有回路,因此未跳过的节点只可能是来的方向的节点若跳到叶子节点,并且时间未用尽,则剩余时间不需要再跳若未到达叶子节点,并且时间未用尽,则剩余时间必须继续跳跃深搜即可,剪枝包含找到答案、时间超限注意题目要求的时间未用尽但找到终...原创 2020-03-15 15:00:36 · 151 阅读 · 0 评论 -
[解题报告]Time Needed to Inform All Employees
题目链接给定一个树形关系结构只有一个根节点headID求从headID到叶子节点的最长路径反向去想,以每个叶子节点为起点,累加其到达headID节点的权重,若累加过程发现到达点x累积权重没有别的叶子节点经过x节点的权重高,则停止累积有一些最短路的思想若有N个节点时间复杂度O(N ^ 2)func numOfMinutes(n int, headID int, manager []...原创 2020-03-15 14:50:28 · 176 阅读 · 0 评论 -
[解题报告]Linked List in Binary Tree
题目链接给定一棵二叉树给定一个链表问是否能按照某种访问顺序使得该访问顺序与链表完全相等上述访问顺序遵循以下规则访问树节点访问树的左孩子或右孩子先序检查每个二叉树节点检查即检查以该节点为头,子节点序列是否存在与链表相等的序列若树有N个节点,链表有M个节点时间复杂度O(M * N)func isSubPath(head *ListNode, root *TreeNode) ...原创 2020-03-15 14:37:23 · 161 阅读 · 0 评论 -
[解题报告]Minimum Cost to Make at Least One Valid Path in a Grid
题目链接给定一个有向的M*N矩阵,每个格子均有一个可无消耗行进的方向,若想要向其他三个方向行进则需要花费1个单位时间去反转这个方向问从左上角到右下角最短消耗多少个单位时间单源最短路算法解决即可SPFA(Shortest Path Faster Algorithm)宽搜过程中针对四个方向目标点当前最短消耗进行松弛最终输出目的地点最短消耗即可func minCost(grid [][]i...原创 2020-03-15 14:21:19 · 139 阅读 · 0 评论 -
[解题报告]Validate Binary Tree Nodes
题目链接给出节点数以及可能组成二叉树的若干个左右儿子关系判断给出的信息是否为一棵二叉树常规递归遍历节点X,X取自[0, N)若单次遍历中发现重复遍历节点,则构成回路不为二叉树遍历到了所有节点且没有构成回路,则为二叉树func validateBinaryTreeNodes(n int, leftChild []int, rightChild []int) (ans bool) {...原创 2020-03-15 00:44:01 · 126 阅读 · 0 评论 -
[解题报告]Closest Divisors
题目链接提供一个数num,要求从num+1和num+2中找到两个数a和b,且满足下面条件a * b = num + 1 or num + 2abs(a-b)最小针对num+1和num+2分别处理,设它俩为target从[sqrt(target), 1]区间内,找到a使得target mod a == 0b=target / afunc closestDivisors(num in...原创 2020-03-15 00:39:52 · 120 阅读 · 0 评论 -
[解题报告]Largest Multiple of Three
题目链接给若干个数,要求找出一种最大的组合的整数,且该整数能够被3整除贪心方法通过求和对3取余可以得出需要删除的数字之和的余数比如8、6、7、1、0,其中0因为需要放在最后一位让整个数变得更大,所以肯定不会删除8+6+7+1=22 mod 3 = 1 即删除的数的总和对3取余为1,即删除1扩展的来说,若删除1个数满足不了该要求,则尝试删除2个数,以此类推,贪心的方案就是尽可能少的删除数...原创 2020-03-15 00:34:36 · 302 阅读 · 0 评论 -
[解题报告]Construct Target Array With Multiple Sums
N个1,每次求和后将和随机赋给数组的一个位置target[i]给定target数组问是否可以组成该数组逆向思维,每次寻找最大的数(肯定是上次组成的结果)根据最大值和剩余值的关系进行处理具体可以参考代码中的注释func isPossible(target []int) (found bool) { max := 0 idx := 0 sum := 0 for i, v := ran...原创 2020-03-15 00:09:15 · 134 阅读 · 0 评论 -
[解题报告]Maximum Number of Events That Can Be Attended
给若干区间段[si, ei],每个单位时间 i 可且仅可完成一个任务,完成任务的要求为si <= i <= ei问最多可完成多少个任务优先针对每个区间ei进行升序排序,获得以ei为关键字的排序序列遍历每个区间段,从[si, ei]中取一个没完成过的单位时间i,标记该时间完成该时间段的任务,答案数+1上述没完成过的单位时间使用Go的HashMap标记,查询、插入时间复杂度O(1)...原创 2020-03-14 21:51:11 · 371 阅读 · 0 评论