LeetCode
文章平均质量分 79
LeetCode
virgilshi
和舒适区说白白(ง'-')ง
展开
-
[LeetCode] 第 210 场周赛
时间:2020-10-11 11:51:59第一次参加周赛,把做出来的两题写下来…第一题本质上是考查栈,class Solution {public: int maxDepth(string s) { stack<char> st; int res = 0; for (auto &c : s) { if (c == '(') { st.push(c);原创 2020-10-11 11:54:02 · 189 阅读 · 0 评论 -
[LeetCode] 树的总结(二叉树和N叉树)
写在前面树的考察点归根结底是对树的前序、中序、后序和层序的考察,树的前、中、后序遍历的递归写法是图的深度优先搜索的子集,因为带有递归特点,所以往往可以使用栈将其改写成非递归写法,树的层序遍历是图的广度优先搜索的子集。树的遍历树的递归遍历难度非常小,一般不会直接考察,而选择考察它的非递归写法,之前专门为二叉树和N叉树的遍历写过总结博客。由于此知识点过于重要,而且在面试手撕代码中是高频代码,因此重新再整理一次。LeetCode中相关的题如下:94. 二叉树的中序遍历144. 二叉树的前序遍历17原创 2020-07-29 22:56:02 · 445 阅读 · 0 评论 -
[LeetCode] 图的遍历总结(深度优先遍历+广度优先遍历)
文章目录写在前面130. 被围绕的区域写在前面图的遍历有两种即深度优先遍历(DFS)和广度优先遍历(BFS),图的遍历算法中DFS最经典的应用是回溯算法,图的经典算法也有多种,最小生成树(Prim Algo. + Krustal Algo.),最短路(Dijkstra Algo. + Floyd Algo.),可见这篇博客的总结。130. 被围绕的区域给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。原题链接原创 2020-07-14 22:03:20 · 1462 阅读 · 0 评论 -
[LeetCode] 动态规划题型总结
写在前面动态规划在互联网公司的笔试题中经常会使大题的压轴题,解动态规划题的关键是定义动态规划变量和写出状态转移方程,本篇博客主要探讨动态规划题型解法,最后也会介绍动态规划与其他算法知识结合的题。152. 乘积最大子数组...原创 2020-07-13 20:42:30 · 331 阅读 · 0 评论 -
[LeetCode] 回溯题总结
写在前面回溯法属于图的暴力深度优先搜索的一种应用,其特点是,维护一条深度遍历的路径,在路径的尽头(遍历完毕)判断条件是否满足,若是则找到一个组合,若否,则沿着递归深度的路径逐步回溯,回溯时调转遍历方向,递归至其他路径check是否满足条件,直至遍历完所有的路径则终止,递归深入+回溯退出。37. 解数独原题链接解题思路: 采用行填充的方式,先填充第1行,再填充第2行…,直至填充完第9行,在填充第i行时,若填充至第9列,则下一次将填充第i+1行第0列,OK,保持这个整个思路,接下来来计算按照规定动作写回原创 2020-07-12 22:41:08 · 193 阅读 · 0 评论 -
[LeetCode] 分治算法总结
写在前面…493. 翻转对给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量解题思路: 起初的想法是模仿题137做法,用二分查找来做,用multiset维护一个动态有序序列,然后先将j定下来然后在有序序列中找大于2*nums[j]索引,即可求出有序序列中翻转对个数,但是OJ超时了,然后参考这篇博客的解法,解法1用的是树状数组这个留以后研究,看好理解点的解法2,解法2采原创 2020-07-12 21:39:26 · 674 阅读 · 0 评论 -
[LeetCode] 树状数组+线段树总结
文章目录写在前面线段树树桩数组相关题写在前面LeetCode树状数组+线段树的题比较少,而且这两个知识点在面试时被考察的概率极小,但是如果我们知道这两个知识点,在解题的时候会非常便捷(利用高维度工具打击低维度题目,解题所需的思维量会少很多),本文也是出于学习树状数组和线段树的目的写在这篇博客的。线段树线段树是二叉树形态的数据结构,用于存储和查询包含某个点的所有区间,时间复杂度为O(lgn+k),k为满足条件的区间个数,空间复杂度为O(n).树桩数组相关题307. 区域和检索 - 数组可修改留原创 2020-07-12 11:12:12 · 561 阅读 · 0 评论 -
[LeetCode] 二分查找题型总结
写在前面二分查找属于数据结构与算法中基础算法,属于必须掌握的算法之一,往往向这类基础算法广受面试官喜爱,一则算法的内容很普通,二则二分查找属于查找算法中的优化算法,面试官可以考察面试者是否关注算法复杂度,我们在解题时,若题面显著要求时间复杂度对对数,那么很大概率要考察二分查找。153. 寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中原创 2020-07-11 21:28:37 · 416 阅读 · 0 评论 -
[LeetCode] LeetCode中链表题总结
写在前面本篇博客主要讲解LeetCode中链表相关题型的解法,以及对它的思考和理解,链表类型题是互联网公司面试中最喜欢手撕代码的题型,因为这类题用C/C++解题时会用到指针,而指针又可以进一步考察内存管理,然后进一步引出操作系统,可谓以点带面。160. 相交链表如下面的两个链表:在节点 c1 开始相交。解题思路: 此题属于链表中比较简单的题,解题思路应该是要在如何让两个指针同时指向同一个节点上做文章,常见的解题思路是,将长链表指针移动长短链表长度差值的位置,然后一起移动,即可同时指向同一节点,然原创 2020-07-05 15:37:05 · 492 阅读 · 0 评论 -
[LeetCode] Trie(前缀树)题型总结
文章目录写在前面208. 实现 Trie (前缀树)写在前面本篇博客主要讲解对LeetCode中Tier类型题的解法归纳和思考和对算法本身的一些理解。208. 实现 Trie (前缀树)实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app")原创 2020-07-05 11:45:33 · 249 阅读 · 0 评论 -
LeetCode 单词拆分题小结
139. 单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。原题链接解题思路: 此题应该是典型的动态规划解题,定义dp[len]表示前len个字符组成的字符串能否被拆分,然后状态转移即为长度为len的后L个字符组成的字符串是否在字典中,若在则dp[len]取决于长度为len-L是否能拆分,即dp[len-L]的值,OK,状态转移方程为dp[len]=dp[len−L]&&substr(L)∈wor原创 2020-06-25 15:31:10 · 509 阅读 · 0 评论 -
[LeetCode] 206. 反转链表(迭代、递归、链表)
206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?解题思路: 此题虽然简单,但是是面试中常见的手撕代码题,而且关于链表的题,会涉及到指针,内存管理等等,面试官可以通过链表题牵引出内存管理、指针的知识,因此链表的题建议重点准备。此题题意要求提供两种解法,即迭代和递归,摘取代码注释中的题解。提原创 2020-06-14 15:33:34 · 184 阅读 · 0 评论 -
[LeetCode] 42. 接雨水(单调栈)
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路: 试想一下,若我们手动解此题会如何解?我们可能会遍历数组,然后计算每个元素所在的位置形成的水柱面积,水柱的宽为1,现在就需要知道原创 2020-06-13 12:47:06 · 435 阅读 · 0 评论 -
[LeetCode] 146. LRU缓存机制(设计题)
146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get和 写入数据 put 。获取数据get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:原创 2020-06-12 11:42:32 · 321 阅读 · 0 评论 -
[LeetCode] 164. 最大间距(桶排序)
164. 最大间距给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。请尝试在线性时间复杂度和空间复杂度的条件下原创 2020-06-10 22:23:13 · 249 阅读 · 0 评论 -
[LeetCode] 3. 无重复字符的最长子串(双指针)
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。解题思路: 一般看到字符串子串问题,我们会想到用双指针解,看到字符串子序列问题,会想到用动态规划解,i.e.,子串问题双指针,子序列问题动态规划。 此题也不例外,利用双指针解,很快即可解题,主要的思路是,维护一个hashmap统计双指针页框内字符的频数,双指针(i和j)初始化状态均位于左侧,每次指针j向右移动一个位置,然后check这个位置的字符在页框内出现的频数超过1,若是则通过右移指针i使得频数降为1,双指针原创 2020-06-10 18:50:13 · 579 阅读 · 1 评论 -
[LeetCode] 990. 等式方程的可满足性(图,并查集)
990. 等式方程的可满足性给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。解题思路: 解此题时,感觉考察的是图和并查集的知识,然后看了一眼标签,判断的没错,但是写代码时,发现思考的点有点混乱,然后看了一下官方的并查集解题思路,原创 2020-06-08 11:16:18 · 194 阅读 · 0 评论 -
[LeetCode] 30. 串联所有单词的子串(哈希表)
30. 串联所有单词的子串给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。解题思路: 先将题意转换一种说法,题目给定一组长度相同的单词,假设个数为n,长度为len,在字符串s中找一段长度为 n*len的子字符串,使得这个子字符串恰好由单词words组成,那么最自然的想法是,对字符串s每个长度为n*len的子字符串都进原创 2020-06-06 21:06:09 · 372 阅读 · 0 评论 -
[LeetCode] 128. 最长连续序列(数组)
128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。解题思路: 此题的标签是并查集+数组,一开始解题的时候,想着如果用并查集的话,那么可以用hashmap存在并查集的关系,然后键存访问元素,值存访问元素所在的连续序列的第一个元素,在Union的时候会发现,需要对n个元素,两两进行Union,时间复杂度为O(原创 2020-06-06 19:48:43 · 219 阅读 · 0 评论 -
[LeetCode] 25. K 个一组翻转链表(链表)
25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。解题思路:解链表题,解题前要想好一个好的链表模型,否则很容易做着做着在挪动节点的时候出错或者说,由于模型没选好,会把问题弄的很复杂。比如之前做过的将链表奇数索引的节点移动到链表的前半段,将偶数索引的节点移动到链表的后半段,如果我们按照题意在遍历链表的过程挪动节点,问题将会弄的很复杂,又要维护插入位原创 2020-06-06 17:30:37 · 368 阅读 · 0 评论 -
[LeetCode] 350. 两个数组的交集 II
350. 两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。解题思路: 本题虽然标记的是Easy,但是此题进阶第3点提的要求非常有趣,值得好好解一下。OK,先介绍磁盘内存不受限的解法,i.e.,所有要处理的数据均可一次加载到内存中,那么首先对两个序列继续排序,然后用双指针分别指向两个序列的元素,当元素相当时候,则找到交集中的一个元素,指针同时挪动,若两个元素不相等,那么移动较小元素对应的指针。解此题的关键是要想到排序+双指针,那如果在思维混沌时想到这两个组合呢,遇到思路一时阻塞的题,我们原创 2020-06-03 12:06:47 · 189 阅读 · 0 评论 -
[LeetCode][总结] 只出现n次的数字(I-II-III...)总结
只出现n次的数字(I-II-III…)总结LeetCode中「只出现n次的数字…」题有以下几题:260. 只出现一次的数字 III137. 只出现一次的数字 II136. 只出现一次的数字题意分别是:题136给定非空整数序列,只有一个元素(A)只出现一次,其他元素都出现两次,找出出现一次的元素.题137给定非空整数序列,只有两个元素(A,B)只出现一次,其他元素都出现两次,找出这两个出现一次的元素.题260给定非空整数序列,只有一个元素(A)只出现一次,其他元素都出现三次,找出出现一次原创 2020-06-01 09:03:41 · 328 阅读 · 1 评论 -
[LeetCode] 1431. 拥有最多糖果的孩子(数组)
1431. 拥有最多糖果的孩子给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。解题思路: 本题的题意是给定一个序列,问序列的每个元素是否符合要求:将元素加指定偏移后是否大于剩余元素。本题的一个直接暴力解法是,每次访问到一个元素即遍历一次剩余元素,求出剩原创 2020-06-01 08:25:14 · 435 阅读 · 0 评论 -
[LeetCode] 101. 对称二叉树
101. 对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?解题思路: 此题是《剑指offer》书上的题,虽然LeetCode标记的是esay,但是此题考查原创 2020-05-31 16:18:57 · 142 阅读 · 0 评论 -
[LeetCode] 124. 二叉树中的最大路径和(深度优先遍历)
124. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。解题思路: 本题题意是求解树中最大路径序列和(这里路径的定义是从一个节点到达另一个节点,不一定经过根节点),那么一条路径的形成是由节点、向左子树延展的路径、向右子树延展的路径组成,(这里延展的路径与我们常规理解的路径定义相同但不一定取整个直达叶子节点的全路径),那么想要题面定义的路径最长,只需左子树延展的路径和右子树延展路径均原创 2020-05-18 09:22:24 · 1028 阅读 · 0 评论 -
[LeetCode] 140. 单词拆分 II(DFS+记忆数组)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。解题思路:——————————本题打算详细记录一下解题的思考过程,后面写博客也力求这样写,一开始可能写的语言比较繁琐,后续力求精简,因为有时候会发现,解题思路比解题思路更能启发人,每一个简洁的解题思路背后都是对问题深度思考后的抽象,而这种抽象能力和思考问题的方式、原创 2020-05-16 21:22:18 · 310 阅读 · 0 评论 -
[LeetCode] 384. 打乱数组(洗牌算法)
384. 打乱数组打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。solution.shuffle();// 重设数组到它的初始状态[1,2,3]。solution.reset();// 随机返回数组[1,2,3]打乱后的结果。solut原创 2020-05-15 15:12:29 · 386 阅读 · 0 评论 -
[LeetCode] 560. 和为K的子数组(和值数组,哈希)
560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。解题思路: 本题一开始以为是用滑动窗口解题,但是在写代码的时候发现,整数数组的值有正有负,和值也不是单调的,因此窗口的收缩方向不好判断,于是换了种思路。此题的背景是求和,而且是求序列的连续子集和,那么为了降低时间复杂度,往往我们会将0到当前索引位置的和值求出来放在一个和值数组中,然后求某段子数组的和值,比如[i,j],只需计算SUM[i,j]=sum[j]-sum[i]+num[i],但是算法的时原创 2020-05-15 09:34:20 · 273 阅读 · 0 评论 -
[LeetCode] 215. 数组中的第K个最大元素(快速排序、堆排序)
215. 数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。解题思路: 此题属于TOP Kth 类型图,这类型题有通用的解法,即快速排序、堆排序。堆排序// 此题常规的解法有两种,即快排、堆排序// C++中关于堆可以用数据结构priority_queue// 因此本题选择堆排序解题// Time: O(nlogk), Space:O(k)class Solution {public:原创 2020-05-14 19:40:09 · 508 阅读 · 0 评论 -
[LeetCode] LeetCode中与有向图相关的题目总结
文章目录相关题743. 网络延迟时间相关题LeetCode中有向图相关的题的题号为:743,685,684,399,332,310,210743. 网络延迟时间有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。现在,我们从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。原创 2020-05-13 18:53:48 · 1125 阅读 · 0 评论 -
[LeetCode] 179. 最大数
179. 最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。解题思路: 我们可以先研究一下排序规则,假设给定不是一组数而是两个数,我们想让这两个数组成的数最大,那么很自然的就想到用str(a)+str(b)与str(b)+str(a)的关系来决定是使用ab排序还是使用ba排序,那么对于一组数,我们也原创 2020-05-13 16:28:01 · 213 阅读 · 0 评论 -
[LeetCode] 329. 矩阵中的最长递增路径
329. 矩阵中的最长递增路径给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。解题思路: 虽然此题标记的难度是难,但是设计好了图遍历的函数形式,解此题不太难,之前做题,尤其是做与路径统计的极值问题时,会发现设计一个号的函数形式,具体的说,是函数的形参和返回值的物理涵义,会非常有利于打开解题的思路。题目要求的是醉成递增路径,那么我们先分析一下,所有的路径一定是以图中某个点为起点,然后向四周延展,那么原创 2020-05-12 11:24:41 · 413 阅读 · 0 评论 -
[LeetCode] 50. Pow(x, n) (快速幂)
50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数解题思路: 快速幂应该是算法题中非常常规的一道题,如果我们用迭代相乘求幂,时间复杂度为O(n),如果这样解就不叫快速求幂了。快速幂解法的时间复杂度为O(log(n)),采用递归相乘的解法,利用的公式是,当n为奇数时,x2n+1=xn∗xn∗xx^{2n+1}=x^n*x^n*xx2n+1=xn∗xn∗x,当n为偶数时,x2n=xn∗xnx^{2n}=x^n*x^nx2n=xn∗xn,xnx^nxn计算出来后,可以直接计算原创 2020-05-11 17:36:33 · 202 阅读 · 0 评论 -
[LeetCode] 93. 复原IP地址
93. 复原IP地址给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]解题思路: 此题依然是考察回溯算法,回溯算法的解法我在上一题中已经阐述了基本的解题思路和解法规范,这里不再赘述,可以直接看这题中归纳的回溯算法的基本思路。这题在考虑回溯算法的同时也要考虑相原创 2020-05-10 09:33:37 · 415 阅读 · 0 评论 -
[LeetCode] 17. 电话号码的字母组合(回溯算法)
17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。解题思路: 看到组合排列之类的题,基本上想到的是用深度优先遍历中回溯算法解题,这个应该形成条件反射,然后视题目对算法时间的要求再考虑是否需要做剪枝操作。回溯算法的特征是,维护一条可伸缩的路径,比如我代码中使用的string out,然后在递归深入的时候push元素,在递归退出即回溯的时候,pop元素,回溯算法基本是按照这种方式解题的,然后剪原创 2020-05-10 08:18:26 · 389 阅读 · 0 评论 -
[LeetCode] 总结 - 盛水容器题
相关题:42. 接雨水[]原创 2020-05-06 21:09:12 · 327 阅读 · 0 评论 -
[LeetCode] 407. 接雨水 II
407. 接雨水 II给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。示例:给出如下 3x6 的高度图:[ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1]]返回 4 。如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],...原创 2020-05-06 21:00:23 · 549 阅读 · 0 评论 -
[LeetCode] - 42. 接雨水(单调栈)
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。解题思路: 此题给出2种解法。单调栈这题是典型的单调栈解法,我们维护一个单调递减栈,当发现height[i]大于栈顶元素时,说明有可能形成水坑,这个水坑的高度等于左右柱子中较低的柱子与水坑底部的高度差。class Solution {public: int tr...原创 2020-05-06 15:24:30 · 338 阅读 · 0 评论 -
[LeetCode]11. 盛最多水的容器
11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。解题思路: 本题要求的是找两个柱子,使两个柱子盛的水最多,最简单的方法是采取暴...原创 2020-05-06 12:29:12 · 215 阅读 · 0 评论 -
[LeetCode]98. 验证二叉搜索树
98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ ...原创 2020-05-05 14:20:08 · 82 阅读 · 0 评论