
LeetCode
Skywalker1111
我宁愿什么都做错,也不愿什么都不做。
展开
-
[LeetCode] 23. Merge k Sorted Lists
本题是来自LeetCode上面一道难度为Hard的题,目的是将给定的k个已排序的列表最终融合成一个有序列表。本题的AC率还是可以的,有30%,但是看过讨论区发现,其实大多数人(使用cpp语言的)都是用priority_queue来做的。想到本周算法课刚刚学了分治算法中的归并排序与本题十分类似,因此我决定用归并的做法来做,并且这样做不需要用到除vector的额外数据结构。一、问题描述...原创 2018-09-13 22:16:31 · 179 阅读 · 0 评论 -
[LeetCode] 107. Binary Tree Level Order Traversal II
107题一、问题描述二、问题分析比103更简单,只需要得到result最后转置一次即可。三、问题求解针对问题分析,以下是c++源代码:class Solution {public: vector<vector<int> > levelOrderBottom(TreeNode *root) { vector<vector<i...原创 2018-12-23 21:02:31 · 197 阅读 · 0 评论 -
[LeetCode] 103.Binary Tree Zigzag Level Order Traversal
103题一、问题描述二、问题分析相比较102题,不难发现,zigzag遍历只需要在奇数层(根记为第0层)将得到向量转置即可。转置方法为algorithm里面的reverse。三、问题求解针对问题分析,以下是c++源代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * ...原创 2018-12-23 21:01:23 · 165 阅读 · 0 评论 -
[LeetCode] 115. Distinct Subsequences
文章目录一、问题描述二、问题分析三、问题求解一、问题描述Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string b...原创 2018-12-23 20:58:12 · 197 阅读 · 0 评论 -
[LeetCode] 99. Recover Binary Search Tree
99题一、问题描述二、问题分析本题很明显是之前98题的升级版。上一道题我们谈了如何确定一棵树是否为BST,而本题我们要找出两个出错的位置,并最终调整为BST。如何找出出错的位置呢?先看在上题的算法下什么情况会出错。显然,当本节点root的值大于中序节点遍历的上一个节点prev的值即出错。接下来再看出错的情况有哪些。1.出错的两个数相邻,比如12435。这种情况在遍历树的时候只会出错一次,即...原创 2018-12-23 20:52:17 · 196 阅读 · 0 评论 -
[LeetCode] 45. Jump Game II
一、问题描述二、问题分析这道题虽说是55题的升级版,问法也差不多,但在解题思路上却跟上题很大的不同。55题是问能否到达最后一个元素位置,而45题问的是最少多少步能到达最后的位置(前提是已经确定能够到达)。本题所有的算法就是贪心算法,每次访问一个位置,看看它能到达的最远位置之内的其他位置所能到达的最远位置是多少。每次偶读贪心的选择最远的位置,这样能保证总步数最小。主要原因是这个数组是二维的,因...原创 2018-12-23 20:48:56 · 236 阅读 · 0 评论 -
[LeetCode] 72. Edit Distance
本周算法课讲的是动态规划(dynamic programming),所谓动态规划,就是把一个大的问题的求解转化为求解它的子问题。也就是说,首先需要定义目标的子问题,以子问题的解答支持大问题求解,先求出一系列子问题的解,最终即可求出大问题的解。针对动态规划这一算法,有很多经典的例子帮助我们更好的理解它,比如书上提到的编辑距离(Edit Distance)。因此,本周的题目就是来自LeetCode上面...原创 2018-11-03 15:30:02 · 253 阅读 · 0 评论 -
[LeetCode] 55. Jump Game
本周的两道题目同样也来自LeetCode。分别是一道为难度为Medium的55题Jump Game,以及它的升级版–难度为Hard的45题Jump Game II。本次之所以选择这两道题,是因为本周算法课刚好学了贪心算法(Greedy),而这两道题恰巧用的就是贪心算法。文章目录55题一、问题描述二、问题分析三、问题求解45题一、问题描述二、问题分析三、问题求解55题一、问题描述二、问题分...原创 2018-10-21 16:35:28 · 206 阅读 · 0 评论 -
[LeetCode] 135. Candy
本周选题是LeetCode上面一道难度为Hard的135题–Candy。这道题之所以是Hard难度,并不是因为代码量大或者实现困难,而是算法很精巧。由于我是按照Tag为Greedy去检索得到的题,因此自然而然我们应该考虑如何用贪心算法去实现。文章目录一、问题描述二、问题分析三、问题求解一、问题描述二、问题分析题目要求每个等级高的孩子的糖数必须必他的邻居高,却没有规定如果两个等级相同邻居的...原创 2018-10-28 21:32:18 · 201 阅读 · 0 评论 -
[LeetCode] 102.Binary Tree Level Order Traversal
本周算法课学习了广度优先遍历(BFS),这种遍历方法比深度优先遍历(DFS)在图上的应用更加广泛,使用场景也更多变。很多关于图的重要的算法都是由BFS演化而来,比如说Dijkstra算法,解决的就是非负图两点间的最短路径问题。本周先挑了几道简单的BFS题,就是BFS遍历树。其中有102.Binary Tree Level Order Traversal、103.Binary Tree Zigzag...原创 2018-09-29 22:47:55 · 188 阅读 · 0 评论 -
[LeetCode] 127. Word Ladder
本周选题是LeetCode上面一道AC率为21%、难度为Medium的127题–Word Ladder。这道题看似是一道应用题:要求是求出从一个单词转化到目标单词的最小次数。那么它的实质是什么呢?仔细分析,从问题本质出发,不难找到相应的算法。文章目录一、问题描述二、问题分析三、问题求解一、问题描述二、问题分析问题要求我们给出从初始单词开始,每次只能变换一个字母,最后经历最少变换次数得到最...原创 2018-10-07 20:14:03 · 204 阅读 · 0 评论 -
[LeetCode] 8. String to Integer (atoi)
本题是来自LeetCode上面一道难度为Medium的题,目的是将字符串转换为数字(atoi)。这个函数在标准库中是存在的,只不过本题要求我们自己设计算法。选择本题的动机是看到这个的AC率比较低,只有14%,而这个atoi函数我们又经常使用,很想看看如何设计这个转换算法。一、问题描述二、问题分析根据题目描述,输入的字符串只有当’ ‘、’+’、’-‘出现在数字前才是有效的。并且,...原创 2018-09-09 21:37:21 · 263 阅读 · 0 评论 -
[LeetCode] 98. Validate Binary Search Tree
本周的两道题目都是来自LeetCode。一道为难度为Medium的98题Validate Binary Search Tree,一道为难度为Hard的99题Recover Binary Search Tree。之所以将这两道题合并在一起,是因为二者的关联相似度极大,更准确的说,99题是98题的延伸,只需改动一小部分即可。二者所采用的的方法都是深度优先遍历法(DFS)中的中序遍历,与我们本周算法课所...原创 2018-09-20 15:29:50 · 234 阅读 · 0 评论 -
[算法Project] Capacited Facility Location Problem
这次博客的内容是关于我们算法课程的期末project:Capacited Facility Location Problem。我使用的是python语言求解。这道题乍一看像是一个线性规划问题,但最终我还是选择了贪心算法以及模拟退火算法。源代码即各种数据可见:github项目地址文章目录一、问题描述二、问题分析三、贪心算法四、模拟退火(SA)一、问题描述二、问题分析首先,我们看看这个问...原创 2018-12-23 22:37:00 · 566 阅读 · 0 评论