解题报告
文章平均质量分 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 · 468 阅读 · 0 评论 -
[解题报告]LRU Cache
题目链接 题目要求实现一个大小为Capacity,操作复杂度在O(1)的缓存列表,缓存规则: 1 放入数据,并且无论是覆盖放入还是新增的放入,均认为其是最新的数据 2 取得数据,并且若获取成功,则认为它是最新被取得过的数据 3 与规则中“最新”的概念相对应“最旧”概念,若放入数据时缓存列表超过上限Capacity,则需要移除一个“最旧”的数据 基本思路:LRU cache,使用一个双端链表+has...原创 2020-04-17 11:24:20 · 201 阅读 · 0 评论 -
[解题报告]Maximum Product of Splitted Binary Tree
题目链接 给定一棵二叉树,要求移除一个边,使得剩余两颗二叉树之和的乘积最大 首先求出以每个点为根节点的和,将这个和赋给该点的Val 其次遍历二叉树,尝试切除每一条边,查看切除后剩余两颗树之和的差值,该差值越小则乘积越大 Runtime: 116 ms (beats 90.1%) Memory Usage: 17.1 MB func maxProduct(root *TreeNode) int { ...原创 2020-03-26 23:05:53 · 217 阅读 · 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 · 151 阅读 · 0 评论 -
[解题报告]Jump Game IV
题目链接 给一个数组,以0为起点出发,经过一定决策的跳跃,问最短到达len-1位置的代价 每次跳跃代价1单位时间 你可以向相邻的位置跳跃,也可以跳到在数组中具有相同值的位置 注意任何时候不允许跳出数组 BFS解决即可 注意寻找下一步策略使用优于O(N)的方法解决,提高算法执行效率 使用Go的HashMap可以实现常数级的后继节点查找 开始搜索前需要预处理 func minJumps(arr []i...原创 2020-03-24 22:04:49 · 167 阅读 · 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 · 214 阅读 · 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 · 213 阅读 · 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 · 154 阅读 · 0 评论 -
[解题报告]Frog Position After T Seconds
题目链接 从源点1跳到目标点target,给定秒数t秒,每次跳跃消耗1s 每次跳会从可以到达的若干点随机跳到一个节点 可以到达被定义为未跳过的节点,因为是树结构,所以不会有回路,因此未跳过的节点只可能是来的方向的节点 若跳到叶子节点,并且时间未用尽,则剩余时间不需要再跳 若未到达叶子节点,并且时间未用尽,则剩余时间必须继续跳跃 深搜即可,剪枝包含找到答案、时间超限 注意题目要求的时间未用尽但找到终...原创 2020-03-15 15:00:36 · 206 阅读 · 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 · 214 阅读 · 0 评论 -
[解题报告]Linked List in Binary Tree
题目链接 给定一棵二叉树 给定一个链表 问是否能按照某种访问顺序使得该访问顺序与链表完全相等 上述访问顺序遵循以下规则 访问树节点 访问树的左孩子或右孩子 先序检查每个二叉树节点 检查即检查以该节点为头,子节点序列是否存在与链表相等的序列 若树有N个节点,链表有M个节点 时间复杂度 O(M * N) func isSubPath(head *ListNode, root *TreeNode) ...原创 2020-03-15 14:37:23 · 198 阅读 · 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 · 176 阅读 · 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 · 160 阅读 · 0 评论 -
[解题报告]Closest Divisors
题目链接 提供一个数num,要求从num+1和num+2中找到两个数a和b,且满足下面条件 a * b = num + 1 or num + 2 abs(a-b)最小 针对num+1和num+2分别处理,设它俩为target 从[sqrt(target), 1]区间内,找到a使得target mod a == 0 b=target / a func closestDivisors(num in...原创 2020-03-15 00:39:52 · 151 阅读 · 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 · 353 阅读 · 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 · 171 阅读 · 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 · 419 阅读 · 0 评论
分享