LeetCode
文章平均质量分 79
LeetCode记录
聂炳玉
不断学习,不断提升
展开
-
31下一个排列
一、前言标签:其他。问题来源LeetCode 31 难度:中等。问题链接:https://leetcode-cn.com/problems/next-permutation/二、题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 →..原创 2020-07-26 00:28:17 · 131 阅读 · 0 评论 -
287寻找重复数
一、前言标签:二分查找。问题来源LeetCode 287 难度:中等。问题链接:https://leetcode-cn.com/problems/find-the-duplicate-number/二、题目给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例1:输入: [1,3,4,2,2]输出: 2示例2:输入: [3,1,3,4,2]...原创 2020-07-25 22:55:41 · 161 阅读 · 0 评论 -
105从前序与中序遍历序列构造二叉树
一、前言标签:树_构建二叉树。问题来源LeetCode 105难度:中等。问题链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/二、题目根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,2.原创 2020-07-25 16:32:18 · 198 阅读 · 0 评论 -
124二叉树中的最大路径和
一、前言标签:树。问题来源LeetCode 124 难度:困难。问题链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/二、题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点示例1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输.原创 2020-07-25 14:59:14 · 149 阅读 · 0 评论 -
253会议室 II
一、前言标签:区间有序化、上下车问题。问题来源LeetCode 253 难度:中等。问题链接:https://leetcode-cn.com/problems/meeting-rooms-ii/二、题目给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],...] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。示例1:输入: [[0, 30],[5,.原创 2020-07-25 10:26:27 · 311 阅读 · 0 评论 -
22括号生成
一、前言标签:回溯算法。问题来源LeetCode 22 难度:中等。问题链接:https://leetcode-cn.com/problems/generate-parentheses/二、题目数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "(...原创 2020-07-25 08:58:40 · 240 阅读 · 0 评论 -
148排序链表
一、前言标签:归并排序。问题来源LeetCode 148 难度:中等。问题链接:https://leetcode-cn.com/problems/sort-list/二、题目在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3-&...原创 2020-07-24 23:24:21 · 133 阅读 · 0 评论 -
76最小覆盖子串
一、前言标签:字符串滑动窗口。问题来源LeetCode 76 难度:困难。问题链接:https://leetcode-cn.com/problems/minimum-window-substring/二、题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串""。 如果 S 中..原创 2020-07-24 21:37:46 · 167 阅读 · 0 评论 -
10正则表达式匹配
一、前言标签:动态规划。问题来源LeetCode 10 难度:困难。问题链接:https://leetcode-cn.com/problems/regular-expression-matching/二、题目给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s 可能为空,且只包含...原创 2020-07-24 09:30:48 · 592 阅读 · 0 评论 -
739每日温度
一、前言标签:排序合并。问题来源LeetCode 739 难度:中等。问题链接:https://leetcode-cn.com/problems/daily-temperatures/二、题目请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如:给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[...原创 2020-07-23 13:19:08 · 98 阅读 · 0 评论 -
56合并区间
一、前言标签:排序合并。问题来源LeetCode 56 难度:中等。问题链接:https://leetcode-cn.com/problems/merge-intervals/二、题目给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4].原创 2020-07-23 12:07:23 · 120 阅读 · 0 评论 -
46全排列
一、前言标签:全排序、回溯法。问题来源LeetCode 46 难度:中等。问题链接:https://leetcode-cn.com/problems/permutations/二、题目给定一个没有重复数字的序列,返回其所有可能的全排列。示例 1:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]三、思路用回溯法解决本题,先回顾一下回溯法。...原创 2020-07-22 23:14:04 · 194 阅读 · 0 评论 -
394字符串解码
一、前言标签:栈。问题来源LeetCode 394 难度:中等。问题链接:https://leetcode-cn.com/problems/decode-string/二、题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据.原创 2020-07-22 20:36:07 · 190 阅读 · 0 评论 -
2两数相加
一、前言标签:链表。问题来源LeetCode 2 难度:中等。问题链接:https://leetcode-cn.com/problems/add-two-numbers/二、题目给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -&g...原创 2020-07-22 20:15:06 · 191 阅读 · 0 评论 -
221最大正方形
一、前言标签:动态规划、栈运用、双指针。问题来源LeetCode 5 难度:中等。问题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/二、题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4三、思路动态规划解决这个问题,递推公式:d..原创 2020-07-21 21:03:19 · 150 阅读 · 0 评论 -
406根据身高重建队列
一、前言标签:贪心算法。问题来源LeetCode 406 难度:中等。问题链接:https://leetcode-cn.com/problems/queue-reconstruction-by-height/二、题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总.原创 2020-07-21 20:58:05 · 103 阅读 · 0 评论 -
42接雨水
一、前言标签:动态规划、栈运用、双指针。问题来源LeetCode 5 难度:困难。问题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/二、题目三、思路三种解题方法。方法一:动态规划找到数组中从下标 i 到最左端最高的条形块高度 left_max。 找到数组中从下标 i 到最右端最高的条形块高度 right_max。 扫描数组 height 并更新答案: 累加 min(ma..原创 2020-07-21 20:51:23 · 262 阅读 · 0 评论 -
5最长回文子串
一、前言标签:动态规划、中心扩散。问题来源LeetCode 5 难度:中等。问题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/二、题目给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例2:输入: "cbbd"输出: "bb"三、思路...原创 2020-07-21 20:07:52 · 130 阅读 · 0 评论 -
146LRU缓存机制
一、前言标签:HashTable+双向链表(Doubly Linked List)。问题来源LeetCode 146 难度:中等。问题链接:https://leetcode-cn.com/problems/lru-cache/二、题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返..原创 2020-07-21 19:58:00 · 183 阅读 · 0 评论 -
215数组中的第K个最大元素
一、前言分类:Divide and Conquer。问题来源LeetCode 215 难度:中等。问题链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/二、题目在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,...原创 2020-07-19 08:35:23 · 155 阅读 · 0 评论 -
241为运算表达式设计优先级
一、前言分类:Divide and Conquer。问题来源LeetCode 241 难度:中等。问题链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses二、题目给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +,-以及*。示例1:输入: "2-1-1"输出: [0, 2]解释: ((...原创 2020-07-18 23:32:57 · 192 阅读 · 0 评论 -
315计算右侧小于当前元素的个数
一、前言分类:Divide and Conquer。问题来源LeetCode 315 难度:困难。问题链接:https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/二、题目给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于nums[i] 的元素的数量。示例1:输入:[5,2,6,1]输出:...原创 2020-07-18 19:34:18 · 234 阅读 · 0 评论 -
23合并K个排序链表
一、前言分类:Divide and Conquer。问题来源LeetCode 23 难度:困难。问题链接:https://leetcode-cn.com/problems/merge-k-sorted-lists/二、题目合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例1:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4-...原创 2020-07-18 09:29:53 · 111 阅读 · 0 评论 -
4寻找两个正序数组的中位数
一、前言分类:Divide and Conquer。问题来源LeetCode 4 难度:困难。问题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/二、题目给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例1:nums1 ...原创 2020-07-17 19:52:27 · 219 阅读 · 0 评论 -
895最大频率栈
一、前言分类:Hash Table。问题来源LeetCode 895 难度:困难。问题链接:https://leetcode-cn.com/problems/maximum-frequency-stack二、题目实现 FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack有两个函数:push(int x),将整数x推入栈中。 pop(),它移除并返回栈中出现最频繁的元素。 如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。 示例:...原创 2020-07-16 20:33:48 · 175 阅读 · 0 评论 -
30串联所有单词的子串
一、前言分类:Hash Table。问题来源LeetCode 30 难度:困难。问题链接:https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/二、题目给定一个字符串s和一些长度相同的单词words。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。注意:子串要与words 中的单词完全匹配,中间不能有其他字符,但不需要考虑words中单词串联的顺序...原创 2020-07-14 20:57:59 · 263 阅读 · 0 评论 -
355设计推特
一、前言分类:Hash Table。问题来源LeetCode 355 难度:中等。问题链接:https://leetcode-cn.com/problems/design-twitter/二、题目设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:postTweet(userId, tweetId): 创建一条新的推文 getNewsFeed(userId): 检索最.原创 2020-07-15 20:33:20 · 174 阅读 · 0 评论 -
560和为K的子数组
一、前言分类:Hash Table。问题来源LeetCode 560 难度:中等。问题链接:https://leetcode-cn.com/problems/longest-palindrome/二、题目给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。 数组中元...原创 2020-07-16 20:06:13 · 111 阅读 · 0 评论 -
726原子的数量
一、前言分类:Hash Table。问题来源LeetCode 726 难度:困难。问题链接:https://leetcode-cn.com/problems/number-of-atoms/二、题目给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行.原创 2020-07-16 20:19:07 · 254 阅读 · 0 评论 -
18四数之和
一、前言分类:Hash Table。问题来源LeetCode 18 难度:中等。问题链接:https://leetcode-cn.com/problems/4sum/二、题目给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1...原创 2020-07-11 09:18:27 · 120 阅读 · 0 评论 -
1两数之和
一、前言分类:Hash Table。问题来源LeetCode 1 难度:简单。问题链接:https://leetcode-cn.com/problems/two-sum/二、题目给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。说明:你可以假设nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被...原创 2020-07-11 08:17:57 · 95 阅读 · 0 评论 -
646最长数对链
一、前言分类:动态规划。问题来源LeetCode 646 难度:中等。问题链接:https://leetcode-cn.com/problems/maximum-length-of-pair-chain二、题目给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的...原创 2020-07-11 00:31:44 · 163 阅读 · 0 评论 -
300最长上升子序列
一、前言分类:动态规划。问题来源LeetCode 300 难度:中等。问题链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/二、题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例1:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。三、思路3.1 方法一:动态规划动态规划递推公..原创 2020-07-10 21:42:58 · 294 阅读 · 0 评论 -
72编辑距离
一、前言分类:动态规划。问题来源LeetCode 887 难度:困难。问题链接:https://leetcode-cn.com/problems/edit-distance/二、题目给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse...原创 2020-07-10 21:03:19 · 153 阅读 · 0 评论 -
887鸡蛋掉落
一、前言分类:动态规划。问题来源LeetCode 887 难度:困难。问题链接:https://leetcode-cn.com/problems/super-egg-drop/二、题目你将获得K个鸡蛋,并可以使用一栋从1到N共有 N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F ,满足0 <= F <= N 任何从高于 F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可...原创 2020-07-09 22:53:18 · 250 阅读 · 0 评论 -
96不同的二叉搜索树
一、前言分类:动态规划。问题来源LeetCode 96 难度:中等。问题链接:https://leetcode-cn.com/problems/unique-binary-search-trees/二、题目给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。示例:输入:3输出:5解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / /...原创 2020-07-08 21:23:55 · 101 阅读 · 0 评论 -
95不同的二叉搜索树II
一、前言分类:动态规划。问题来源LeetCode 95 难度:中等。问题链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/二、题目给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。示例:输入:3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null...原创 2020-07-08 18:14:51 · 187 阅读 · 0 评论 -
312戳气球
一、前言分类:动态规划。问题来源LeetCode 312 难度:困难。问题链接:https://leetcode-cn.com/problems/burst-balloons/二、题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得nums[left] * nums[i] * nums[right]个硬币。这里的left和right代表和i相邻的两个气球的序号...原创 2020-07-07 23:49:39 · 173 阅读 · 0 评论 -
64最小路径和
一、前言分类:动态规划。问题来源LeetCode 64 难度:中等。问题链接:https://leetcode-cn.com/problems/minimum-path-sum/二、题目给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小...原创 2020-07-07 21:22:30 · 123 阅读 · 0 评论 -
53.最大子序和
一、前言分类:动态规划。问题来源LeetCode 53 难度:简单。问题链接:https://leetcode-cn.com/problems/maximum-subarray/二、题目给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。三、思路用动态规划思路解决这个问题。...原创 2020-07-07 21:01:39 · 86 阅读 · 0 评论