自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 [解题报告]LFU Cache

题目链接题目要求使用O(1)的Get、Put方法实现LFU缓存LFU缓存是基于LRU缓存的一个优化,使用频次优化元素命中情况,进一步提高命中率,其余概念不再赘述基本思路:使用一个双端链表+两个HashMap实现双端列表存储原始数据、数据在HashMap的key、数据的访问频率第一个HashMap与LRU的实现类似,存储Key对应链表元素指针,以O(1)的效率定位元素第二个HashMap...

2020-04-17 16:35:41 335

原创 [解题报告]LRU Cache

题目链接题目要求实现一个大小为Capacity,操作复杂度在O(1)的缓存列表,缓存规则:1 放入数据,并且无论是覆盖放入还是新增的放入,均认为其是最新的数据2 取得数据,并且若获取成功,则认为它是最新被取得过的数据3 与规则中“最新”的概念相对应“最旧”概念,若放入数据时缓存列表超过上限Capacity,则需要移除一个“最旧”的数据基本思路:LRU cache,使用一个双端链表+has...

2020-04-17 11:24:20 143

原创 [解题报告]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 165

原创 [解题报告]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 98

原创 [解题报告]Jump Game IV

题目链接给一个数组,以0为起点出发,经过一定决策的跳跃,问最短到达len-1位置的代价每次跳跃代价1单位时间你可以向相邻的位置跳跃,也可以跳到在数组中具有相同值的位置注意任何时候不允许跳出数组BFS解决即可注意寻找下一步策略使用优于O(N)的方法解决,提高算法执行效率使用Go的HashMap可以实现常数级的后继节点查找开始搜索前需要预处理func minJumps(arr []i...

2020-03-24 22:04:49 117

原创 [解题报告]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 153

原创 [解题报告]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 155

原创 [解题报告]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 96

原创 [解题报告]Frog Position After T Seconds

题目链接从源点1跳到目标点target,给定秒数t秒,每次跳跃消耗1s每次跳会从可以到达的若干点随机跳到一个节点可以到达被定义为未跳过的节点,因为是树结构,所以不会有回路,因此未跳过的节点只可能是来的方向的节点若跳到叶子节点,并且时间未用尽,则剩余时间不需要再跳若未到达叶子节点,并且时间未用尽,则剩余时间必须继续跳跃深搜即可,剪枝包含找到答案、时间超限注意题目要求的时间未用尽但找到终...

2020-03-15 15:00:36 132

原创 [解题报告]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 154

原创 [解题报告]Linked List in Binary Tree

题目链接给定一棵二叉树给定一个链表问是否能按照某种访问顺序使得该访问顺序与链表完全相等上述访问顺序遵循以下规则访问树节点访问树的左孩子或右孩子先序检查每个二叉树节点检查即检查以该节点为头,子节点序列是否存在与链表相等的序列若树有N个节点,链表有M个节点时间复杂度O(M * N)func isSubPath(head *ListNode, root *TreeNode) ...

2020-03-15 14:37:23 146

原创 [解题报告]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 121

原创 [解题报告]Validate Binary Tree Nodes

题目链接给出节点数以及可能组成二叉树的若干个左右儿子关系判断给出的信息是否为一棵二叉树常规递归遍历节点X,X取自[0, N)若单次遍历中发现重复遍历节点,则构成回路不为二叉树遍历到了所有节点且没有构成回路,则为二叉树func validateBinaryTreeNodes(n int, leftChild []int, rightChild []int) (ans bool) {...

2020-03-15 00:44:01 114

原创 [解题报告]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 100

原创 [解题报告]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 282

原创 [解题报告]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 121

原创 [解题报告]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 337

原创 归并排序(Merge Sort)

归并排序是基于归并操作的一种稳定排序算法,并且也是分治思想的一个典型的应用。在稳定的排序过程下,它可以达到O(n * log(n))的时间复杂度,但是该算法需要依赖一个O(n)的辅助排序空间。  归并排序算法的主要思想为,给出排序区间,将区间等分为两份,并且分别对两个区间进行排序,待两个区间排序完毕,使用O(n)的贪心的方法合并这两个有序区间。其中划分的过程最多占用O(log(n))的时间复杂

2017-08-03 19:03:21 319

原创 UML统一建模语言学习记录——类图

UML即Unified Modeling Language,中文译为统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。  本文将针对类图给出笔者的学习记录。  类图显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。  接下来将针对类与类之间的关系展开介绍。泛化关系

2017-08-02 16:51:37 572

原创 堆排序(Heap Sort)

堆排序是一种高效率的排序方法,它充分的利用了二叉堆的性质,无需借助额外的辅助空间,并且拥有O(n*log(n))的时间复杂度。

2016-12-20 14:38:40 254

原创 二分查找(Binary Search)

二分查找算法在程序设计中并不陌生,它可以在O(log(n))的时间复杂度内找到自己想要的值。  首先需要待查找序列有序,然后需要你想要寻找的值即可,本文给出三种二分查找的例子,即:精确二分查找,如果找不到返回error进行精确查找,如果找不到则返回第一个小于该数值的元素的位置进行精确查找,如果找不到则返回第一个大于该数值的元素的位置

2016-09-05 17:09:44 353

原创 Objective-C面向对象浅谈

本文简述了Objective-C语言的语法,以及一些个人见解。   Objective-C(之后称OC),顾名思义,是C语言面向对象的一种扩展,它保留了C语言的全部语法,并且兼容C语言,在这基础上建立了一套完整的面向对象编程体系。   在面向对象相关的语言层面上,可以说它是比较像Java的:单继承、有接口等。但是在代码中,它跟C++是比较相似的。  让我们来看代码吧!#

2016-08-30 20:36:14 693

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2016-08-30 16:03:56 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除