![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 93
HelloWorld^_^
本科电子通信计算机大类,硕士软件定义网(SDN),现在在做分布式系统的公司工作,以后希望做互联网的infra,”在大数据的时代,为大数据做基础设施“。欢迎大家评论帮助我进步,谢谢!
展开
-
linkedList-cutListHalves切分链表
链表有很多不同的题目,这里写那些由一个链表切分成两个或多个链表的问题。题目简介86. Partition List143. Reorder List148. Sort List234. Palindrome Linked List328. Odd Even Linked List86. Partition ListInput: head = 1->4->3->2->5->2, x = 3Output: 1-&g原创 2020-06-21 07:02:54 · 198 阅读 · 0 评论 -
design-设计iterator
iterator:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。每次调用next(),只返回下一个元素,且“记住”这个位置,下回调用next(),还要接着从这里resume。题目简介281. Zigzag Iterator遍历多个list284. Peeking Iterator遍历list604. Design Compressed String Iterator遍历解压缩之后的string900. RLE Iterator原创 2020-06-20 15:47:11 · 143 阅读 · 1 评论 -
DP-2D-matrix-二维DP
二维DP大概就是dp[i][j]和它的“上”,“左”,“左上”的值有关系。有一大类fuzzySearch有关的题都是string上的二维DP,本篇先不写那个,写单纯的故事setting是matrix的。题目简介62. Unique Paths多少条路63. Unique Paths II多少条路-带障碍64. Minimum Path Sum最短路120. Triangle杨辉三角221. Maximal Square求最大正方形85.原创 2020-06-20 15:12:29 · 282 阅读 · 0 评论 -
linkedList-reverse翻转链表
这篇是翻转链表的一些题。题目简介206. Reverse Linked List普通翻转24. Swap Nodes in Pairs两个一组,普通翻转92. Reverse Linked List II依次从后端拿出元素插入前端,m到n25. Reverse Nodes in k-Group依次从后端拿出元素插入前端,每k个206. Reverse Linked ListInput: 1->2->3->4->5->NU原创 2020-06-17 12:33:29 · 645 阅读 · 0 评论 -
linkedList-cycle链表环F*CycleDetection
Floyd cycle detection判圈算法,是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。题目简介141. Linked List Cycle判断链表是否有环142. Linked List Cycle II找到环的起始点287. Find the Duplicate Number迭代函数202. Happy Number迭代函数141. Linked List Cycle龟兔赛跑,若赶得上就是有环。原创 2020-06-17 10:03:22 · 121 阅读 · 0 评论 -
twoPointer-SlidingWindow滑动窗口-明显版
本文写几个比较明显需要用SlidingWindow的。3. Longest Substring Without Repeating Characters76. Minimum Window Substring原创 2020-06-16 14:40:34 · 135 阅读 · 0 评论 -
BFS-tree类-进阶版
BFS有两种用途(我分的类哈哈),1)tree; 2)graph。本文写tree的,且稍微有点变化的。题目简介339. Nested List Weight Sum364. Nested List Weight Sum II原创 2020-06-10 14:26:15 · 595 阅读 · 0 评论 -
BFS-tree类-用queue的基本款们
BFS有两种用途(我分的类哈哈),1)tree; 2)graph。本文写tree的。tree的挺多的,这篇写基本款们,就是简单的。题目简介102. Binary Tree Level Order Traversal最基本103. Binary Tree Zigzag Level Order Traversal加一个奇偶行flag107. Binary Tree Level Order Traversal II从叶子到根199. Binary Tree Right原创 2020-06-10 14:25:41 · 203 阅读 · 0 评论 -
DFS-Backtracking回溯-经典排序组合
Backtracking有很多很多不同场景的问题。Backtracking其实就是DFS + 剪枝。就几乎是枚举,然后either发现满足条件的branch,or当前branch已经不可能符合条件了剪枝放弃。写一下经典排序组合问题吧。题目简介candidates是否有重复元素元素是否允许重复使用有start39. Combination Sum求和为k的组合元素distinct允许多次使用有40. Combination Sum II求和为k的组合元素可以有重原创 2020-06-05 09:23:40 · 204 阅读 · 0 评论 -
array-用下标来标记index-as-mark
刚刚写了bucket sort,就是利用下标来排序。而这里的一些问题,是用下标来实现别的功能的,比如“标记”,标记某个元素是否出现过。注意一个区别,这类问题是:利用“下标”来记录“元素值本身”,而不是利用“下标”来记录“下标”(参考73.Set Matrix Zeroes,我原来以为73属于这一类其实不是)。题目简介442. Find All Duplicates in an Arrayindex-as-mark448. Find All Numbers Disappeare原创 2020-06-04 14:37:26 · 183 阅读 · 0 评论 -
sort-BucketSort桶排序
164. Maximum Gap274. H-Index原创 2020-06-03 16:34:16 · 441 阅读 · 0 评论 -
tree-verticalTraversal纵列遍历
写两个纵列遍历tree的吧。可以recursive,也可以BFS,要看具体题目要求(同一个纵列的元素怎么排列,同一个位置的元素怎么排列,等等)。314. Binary Tree Vertical Order Traversal一列一列遍历,从上到下。如果位置完全重叠的两个节点,就先左后右。本来觉得recursive的思路很顺,维护一个offset来定位“第几纵列”。试了一下,然而不对,比如下面这个failed test case:【小工具】有一个tree visualizer的python s原创 2020-05-31 15:37:00 · 213 阅读 · 0 评论 -
linkedList-clone制造deep copy
有两个clone图和链表的题。基本的思路是,用一个hashmap来维护新旧对应的节点的映射关系。138那个题除了这种基本方法,还可以不用hashmap直接修改指针。133. Clone Graph给一个联通无向图的reference。node的定义:class Node {public int val;public List neighbors;} 求一个这个图的deep copy。思路是:由旧图的reference point开始遍历旧图(数据结构给的是neighbor list,就用原创 2020-05-26 12:37:00 · 314 阅读 · 0 评论 -
BST-找最接近的值
题目简介700. Search in a Binary Search Tree找确切值270. Closest Binary Search Tree ValueBST中找最接近的1个272. Closest Binary Search Tree Value IIBST中找最接近的k个742. Closest Leaf in a Binary TreeBT中找最接近的1个700. Search in a Binary Search Tree先用一个找确切...原创 2020-05-26 07:09:21 · 306 阅读 · 0 评论 -
tree-inorder中序遍历
tree的中序遍历“左-根-右”。94. Binary Tree Inorder Traversaliterative的思路:“左根右”,如果左子树不为空,就一直向左,路上经过的节点都暂时不访问,因为“左-根”。暂时不访问的节点都放入栈里。等到了leftmost,没有左孩子了,就可以访问当前节点了,“根”。当前节点访问完,就该访问“右”了,检查一下有没有右:有右:直接访问右。注意此处只是往右走一步,因为右孩子也可能有他的孩子,还要遵循in-order的访问规则。往右走一步之后,就原创 2020-05-26 06:30:00 · 705 阅读 · 0 评论 -
twoPointers-palindrome切分回文串
这篇是回文串的另外一篇,专门介绍“切分”。回文串的题给我感觉都有点小brute-force呵呵,因为检验回文串似乎没什么特别好的trick。之前那篇求回文子串的,647,5都是O(n^2),一个一个下标来向两边展开。这篇的也是每一个下标都要切,然后向两边展开。题目简介131. Palindrome Partitioning切成每部分都是回文串:求所有结果, backtracking132. Palindrome Partitioning II切成每部分都是回文串:求最少几刀,原创 2020-05-24 08:49:06 · 135 阅读 · 0 评论 -
twoPointers-左右各扫一遍
上一篇twoPointers-左右扫TrapWater系列,是与TrapWater相关的需要从左和右分别扫的题,这篇也是需要左右扫的,135. Candy一行有N个小孩,每个小孩有个“分数”。有两个规则:1)每个小孩至少有一颗糖2)如果一个小孩比旁边小孩分高,则糖也要比他多。Input: [1,0,2],Output: 5Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies原创 2020-05-24 06:34:49 · 167 阅读 · 0 评论 -
twoPointers-palindrome回文子串
关于回文串,有很多问题。这一篇是关于回文串的基本操作和回文子串问题。题目简介125. Valid Palindrome验证回文串680. Valid Palindrome II能否(允许删一个字母)得到回文串647. Palindromic Substrings求回文子串个数5. Longest Palindromic Substring求最长的回文子串(连续)516. Longest Palindromic Subsequence求最长的回文子串(可原创 2020-05-22 14:15:22 · 157 阅读 · 0 评论 -
twoPointers-左右扫TrapWater系列
TrapWater系列的题,思路是对每个given位置,要求从左右扫到这个位置的“最大/小值”,或者“累积计算结果”,等等,总之是一定要从边上撸过来……于是把类似思路的题总结了一下。题目简介11. Container With Most Water42的铺垫42. Trapping Rain Water求左/右到当前点的最高柱子238. Product of Array Except Self求左/右到当前点的累积乘积84. Largest Rectangle原创 2020-05-21 09:18:41 · 175 阅读 · 0 评论 -
graph-TopologicalSort拓扑排序
一般我们认为,TopologicalSort是BFS中的一种。其实DFS也可以做拓扑排序,只是比较难理解。拓扑排序适用于有向无环图(Directed Acyclic Graph)。有一组数据,其中一些数据依赖其他,问能否按依赖关系排序(被依赖的排在前面),或给出排序结果。...原创 2020-05-20 13:50:29 · 320 阅读 · 0 评论 -
interval-合并MeetingRoom系列
关于intervals有很多很多故事可以讲。各个interval是否重叠,重叠几层,重叠的长度,是否排序过,是Offline的还是streaming的(本文都是offline的)……这里的几个是比较基本的,之后再补充。题目简介56. Merge Intervals基本操作:merge57. Insert Interval基本操作:insert252. Meeting Rooms判断是否重叠253. Meeting Rooms II求最多重叠几层1229原创 2020-05-18 15:32:44 · 339 阅读 · 0 评论 -
graph-Dijkstra最短路径
Dijkstra算法:解决“边权重非负”的加权“有向图”的“单起点”最短路径问题。思路:以起始点为中心向外层层扩展,广度优先搜索BFS(用queue)直到扩展到终点为止。787. Cheapest Flights Within K StopsInput: n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]src = 0, dst = 2, k = 1,K: 最多中转次数,求最小的机票总价 Output: 200凡是图的题,首先很有可能输入是边矩阵,不原创 2020-05-17 13:44:51 · 221 阅读 · 0 评论 -
stack-计算器calculator系列
题目简介150. Evaluate Reverse Polish Notation简单的使用栈的±*/运算224. Basic Calculator1+(4+5),带括号,只有加减227. Basic Calculator II3+2*2,加减乘除,没有括号772. Basic Calculator III2*(5+5*2)/3,加减乘除都有394. Decode String3[a]2[bc],数前内容后726. Number of Atoms...原创 2020-05-17 08:12:48 · 401 阅读 · 0 评论 -
stack-单调栈
单调栈:从栈底元素到栈顶元素呈单调递增或单调递减(本篇的貌似都是递减栈)739. Daily Temperaturesgiven the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0]. 求要等多少天才能等到变暖需要求每个点之后,比它大的第一个点。如果就brute force,找73的变暖日,从74扫到底,…,这样时间复杂度O(n ^原创 2020-05-15 13:56:18 · 166 阅读 · 0 评论 -
Knapsack-DP-重量和价值一致
这一篇写个背包吧。背包就是“给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。”这里的几个题,貌似都是“重量”就看做“价值”,并没有分别给出。应该是简单的情况。以后遇到“重量”和“价值”有各自的值的,再另外写一篇吧。322. Coin ChangeInput: coins = [1, 2, 5], amount = 11 Output: 3Explanation: 11 = 5 + 5 + 1 用coins的面值凑总数amount。求最少需要的原创 2020-05-14 15:34:52 · 478 阅读 · 0 评论 -
DP-两个并列DP-HouseRobber系列
这篇是“两个并列DP”的第一篇,先写典型的HouseRobber系列。特点是:需要分情况讨论当前的选择、做法是:维护两个DP,维护的时候两者互相影响。偷当前元素,robCur不偷当前元素,notRobCur198. House RobberInput: [1,2,3,1] 不能偷相邻的,求最大和。Output: 4Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).Total amount you原创 2020-05-14 09:35:31 · 138 阅读 · 0 评论 -
DP-拓展之前的chain
大致思路是:在当前的位置,去试图和已经存在的chain(用DP来记录)连接,来得到更长的chain,直到达到最终目的。128. Longest Consecutive SequenceInput: [100, 4, 200, 1, 3, 2] 求最长的连续(数轴意义上)序列长度 Output: 4Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.用DP原创 2020-05-13 13:24:27 · 161 阅读 · 0 评论 -
HashMap-用hashmap求和为K
用hashmap保存“还差多少”,或者“累计值”,用于后面的查询。1是求一个组合即可,一旦查到key就bingo。保存“还差多少target-nums[i]”作为key,下标i作为value。注意存和查是不同的!: 存target-nums[i],查询nums[i]。560是求一个连续子数列的和为target,思路是求当前位的累计和sum,保存“sum"作为key,“当前位之前已经有多少个子串和是sum-k” 作为value。有点类似于DP的意思。注意存和查是不同的!: 存sum,查询sum原创 2020-05-13 12:43:04 · 431 阅读 · 0 评论 -
DP-求方法数-加法/乘法原理
DP-求方法数-加法/乘法原理先用一个简单的例子(70),来说明这个类别的特点。70. Climbing Stairs一共n阶楼梯,每次可以爬1阶或2阶,求一共多少种方案这种求总方案的,很容易想到用DP。dp[i]定义为:爬到第i阶的总方案数想小学学过的加法原理和乘法原理:加法原理:从武汉到上海有乘火车、飞机、轮船3种交通方式可供选择,而火车、飞机、轮船分别有k1,k2,k3个班次,那么从武汉到上海共有 k1+k2+k3种方式可以到达。对应本题:第i阶可以从i-1阶来,或者i-2阶来,原创 2020-05-13 11:45:08 · 296 阅读 · 0 评论 -
DP-求子数列最大和/积-MaxEndHere
@“全是套路”-leetcode总结DP-求子数列最大和/积-MaxEndHere这是我写的第一篇leetcode的数据结构算法练习的总结。各个论坛上有很多总结leetcode的解法的博客,但很多是按照作者的理解分类的。这里我按照我自己的思路总结,通过写可以梳理一遍,让自己思路更清晰。有些题,表面看上去不一样,仔细想想,就会觉得,“脱了马甲我还认得你!”今天是DP动态规划问题的一个子类,就是在某个点,若之前的累积结果已经不能再产生积极的contribution的情况下,要把之前的舍弃。53和121原创 2020-05-13 11:05:12 · 200 阅读 · 0 评论