LeetCode
LeetCode刷题记录
AkagiSenpai
哼 ~ 哼 啊啊啊啊啊啊啊啊啊
▃▆█▇▄▖
▟◤▖ ◥█▎
◢◤ ▐ ▐▉
▗◤ ▂ ▗▖ ▕█▎
◤ ▗▅▖◥▄ ▀◣ █▊
▐ ▕▎◥▖◣◤ ◢██
█◣ ◥▅█▀ ▐██◤
▐█▙▂ ◢██◤
◥██◣ ◢▄◤
▀██▅▇▀
展开
-
leetcode 剑指offer 51:数组中的逆序对 -- 分治法思路与代码
目录前言题目描述思路代码前言之前写过一次。。。https://blog.csdn.net/weixin_44176696/article/details/105092613因为写的太糟糕了,今天来个精简重制版。。。题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例1:输入: [7,5,6,4]输出: 5限制:0 <= 数组长度 <= 50000思路求一个数组中逆序对,即求两个下标原创 2020-11-08 10:41:26 · 297 阅读 · 0 评论 -
LeetCode:1111. 有效括号的嵌套深度 “二分” 解法
有效括号字符串 仅由 “(” 和 “)” 构成,并符合下述几个条件之一:空字符串连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括号字符串嵌套,可以记作 (A),其中 A 是有效括号字符串类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(S):s 为空时,depth("") = 0s 为 A 与 B 连接时,depth(A + B) = max(...原创 2020-04-01 09:54:09 · 296 阅读 · 0 评论 -
LeetCode:315. 计算右侧小于当前元素的个数 分治(逆序对
计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右侧仅有 1 个更小的元素 (1).6 的右侧有 1 个更...原创 2020-03-25 19:16:18 · 273 阅读 · 0 评论 -
LeetCode:327. 区间和的个数 逆序对 / multiset / 二分查找+二分插入
给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法。示例:输入: nums = [-2,5,-1], lower = -2, upper = 2...原创 2020-03-25 16:22:23 · 484 阅读 · 0 评论 -
LeetCode:452. 用最少数量的箭引爆气球 贪心
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend...原创 2020-03-23 13:35:07 · 327 阅读 · 1 评论 -
LeetCode:435. 无重叠区间 贪心+双指针
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]...原创 2020-03-23 12:07:44 · 282 阅读 · 0 评论 -
LeetCode:406 根据身高重建队列 贪心
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]...原创 2020-03-23 09:50:58 · 272 阅读 · 0 评论 -
LeetCode:53 最大子序和 分治法
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。通过次数185,334提交次数371,771来源:力扣(LeetCod...原创 2020-03-22 22:46:11 · 464 阅读 · 0 评论 -
LeetCode:365 水壶问题 bfs+哈希set
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous “Die Hard” example)输入: x = 3, y = 5,...原创 2020-03-21 17:02:36 · 231 阅读 · 0 评论 -
LeetCode:496/503 下一个更大元素 I / II 单调栈及单调栈性质总结
关于单调栈的其他题目:单调栈的用处是快速找到左右边第一个小于/大于栈顶元素的元素【LeetCode:402 移掉k位数字】【LeetCode:84. 柱状图中最大的矩形】下一个更大元素 I给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大...原创 2020-03-17 17:57:32 · 183 阅读 · 0 评论 -
LeetCode:84. 柱状图中最大的矩形 暴力/分治/单调栈解法
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10来源:力扣(LeetCode)链接:ht...原创 2020-03-17 15:45:35 · 437 阅读 · 0 评论 -
LeetCode:402 移掉k位数字 贪心 / 单调栈
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = “1432219”, k = 3输出: “1219”解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = “10200”, k ...原创 2020-03-17 11:44:52 · 283 阅读 · 0 评论 -
LeetCode:376 摆动序列 贪心/动态规划
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差...原创 2020-03-16 22:43:37 · 230 阅读 · 0 评论 -
LeetCode:面试题08.06汉诺塔 用栈模拟递归过程的一些总结
如果有的题目要求不能用递归,必须借助栈来完成,那么情况就会稍显复杂如果递归是返回一个值,那么我们可以通过动态规划来求解,如果是递归进行一些操作,比如汉诺塔,那么我们只能用栈模拟这个过程比如题目【面试题 08.06. 汉诺塔问题】在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大...原创 2020-03-16 13:37:39 · 303 阅读 · 0 评论 -
LeetCode:43 字符串相乘 模拟
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数...原创 2020-03-15 13:46:23 · 143 阅读 · 0 评论 -
LeecCode:407 接雨水 II 优先队列+BFS
题目给定一个 m x n 的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。说明:m 和 n 都是小于110的整数。每一个单位的高度都大于 0 且小于 20000。示例:给出如下 3x6 的高度图:[ [1,4,3,1,3,2], [3,2,1,3,2,4], [2,3,3,2,3,1]]返回 4。如上图所示,这是下雨前...原创 2020-03-14 23:52:26 · 192 阅读 · 0 评论 -
LeetCode 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来源:力扣(LeetCode)链接:ht...原创 2020-03-14 17:56:37 · 253 阅读 · 0 评论 -
LeetCode 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来源:力扣(LeetCode)链接:ht...原创 2020-03-14 17:44:57 · 195 阅读 · 0 评论 -
LeetCode:316 去重重复字母 贪心
题目给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: “bcabc”输出: “abc”示例 2:输入: “cbacdcbc”输出: “acdb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-dup...原创 2020-03-14 16:00:44 · 298 阅读 · 0 评论 -
LeetCode:300 最长上升子序列 O(nlog(n))解法 动态规划/二分搜索
题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(L...原创 2020-03-14 14:25:07 · 411 阅读 · 0 评论 -
LeetCode:210 课程表 II 使用DFS来完成拓扑排序
现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]] 输出: [...原创 2020-03-13 13:20:47 · 261 阅读 · 0 评论 -
LeetCode:115. 不同的子序列 动态规划
题目描述给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)示例 1:输入: S = "rabbbit", T = "rabbit"输出: 3解释:如下图所示, 有 3 种可以从 ...原创 2020-03-10 18:55:52 · 225 阅读 · 0 评论 -
LeetCode:567. 字符串的排列 哈希表+滑动窗口
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字...原创 2020-03-10 15:58:02 · 205 阅读 · 0 评论 -
LeetCode:30 串联所有单词的子串 哈希表+滑动窗口
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = "barfoothefoobarman",words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 ...原创 2020-03-10 14:52:35 · 229 阅读 · 0 评论 -
LeetCode:207 课程表 拓扑排序(类bfs
题目现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。...原创 2020-03-09 22:19:57 · 203 阅读 · 0 评论 -
LeetCode:1293 网格中的最短路径 三维BFS
题目描述给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1。示例 1:输入: grid = [[0,0,0], [1,1,0], [...原创 2020-03-09 15:03:07 · 460 阅读 · 0 评论 -
LeetCode:1284. 转化为全零矩阵的最少反转次数 BFS
给你一个 m x n 的二进制矩阵 mat。每一步,你可以选择一个单元格并将它反转(反转表示 0 变 1 ,1 变 0 )。如果存在和它相邻的单元格,那么这些相邻的单元格也会被反转。(注:相邻的两个单元格共享同一条边。)请你返回将矩阵 mat 转化为全零矩阵的最少反转次数,如果无法转化为全零矩阵,请返回 -1 。二进制矩阵的每一个格子要么是 0 要么是 1 。全零矩阵是所有格子都为 0 的...原创 2020-03-09 12:05:32 · 469 阅读 · 0 评论 -
LeetCode:134 加油站 模拟 / 贪心
题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素...原创 2020-03-08 22:43:02 · 171 阅读 · 0 评论 -
LeetCode:169 多数元素(众数) 摩尔投票法
题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/major...原创 2020-03-08 14:55:54 · 207 阅读 · 0 评论 -
LeetCode:76 最小覆盖子串 哈希表+双指针 双指针总结
题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com...原创 2020-03-07 19:43:27 · 239 阅读 · 0 评论 -
最__容器 (最大队列,最小栈)模板
有时候题目给的输入满足某些容器的特性,比如滑动窗口=队列,FIFO=栈,那么要求最值,同时还要实现正常容器的 pop , top 操作,那么可以考虑这个模板其实关键就是:使用一个正常容器和一个辅助容器,两个容器的插入删除端必须一致(比如都是push_back(), pop_front())读取数据,正常容器正常插入,删除辅助容器则要维护:1.维护在读取端必须是最值2.在插入...原创 2020-03-07 17:45:51 · 202 阅读 · 0 评论 -
LeetCode:472 连接词 dfs + 哈希set
题目描述给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词。连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的。示例:输入: ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"]输出:["catsdogcats","dogcats...原创 2020-03-07 16:54:50 · 206 阅读 · 1 评论 -
LeetCode:面试题59 队列的最大值
面试题59 - II. 队列的最大值请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop...原创 2020-03-07 14:03:32 · 143 阅读 · 0 评论 -
LeecCode:135 分糖果 贪心
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输...原创 2020-03-06 18:15:11 · 313 阅读 · 0 评论 -
LeetCode:301 删除无效的括号 BFS
题目描述删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:输入: ")("输出: [""]来源:力扣(LeetCode...原创 2020-03-06 11:33:34 · 222 阅读 · 0 评论 -
LeetCode:310 最小高度树 反向bfs
对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。你可以假设没有重复的边会出现在 edges 中。由于所有的边都是无向边,...原创 2020-03-05 18:28:57 · 258 阅读 · 0 评论 -
LeetCode:279 完全平方数 动态规划 / BFS
题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.来源:力扣(LeetCode) 链接:https://leetcode-cn.com/p...原创 2020-03-05 12:16:02 · 191 阅读 · 0 评论 -
LeetCode:126 单词接龙 II BFS+DFS+剪枝
给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回一个空列表。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginW...原创 2020-03-04 22:43:47 · 332 阅读 · 0 评论 -
LeetCode:101 对称二叉树 递归
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:说明:如果你可以运用递归和迭代两种方法解决这个问题,会很加分。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/symmetric-tree著作权...原创 2020-03-04 17:43:03 · 129 阅读 · 0 评论 -
LeetCode:101 对称二叉树 BFS迭代解法
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:说明:如果你可以运用递归和迭代两种方法解决这个问题,会很加分。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/symmetric-tree著作权...原创 2020-03-04 17:37:53 · 250 阅读 · 0 评论