Leetcode Hot 100
额 菜鸟做题 就想找个工作
PandaDou
啥都别说了,学吧......
展开
-
Leetcode Hot 100目录
2. 两数相加(用额外和空间,不用额外空间如何做)原创 2020-03-03 11:53:16 · 680 阅读 · 1 评论 -
739. 每日温度
题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures=[73,74,75,71,69,72,76,73]temperatures = [73, 74, 75, 71, 69, 72, 76, 73]temperatures=[73,74,75,71,69...原创 2020-04-30 09:31:17 · 219 阅读 · 0 评论 -
394. 字符串解码
题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4...原创 2020-04-29 11:44:12 · 186 阅读 · 0 评论 -
347. 前 K 个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例1输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]实例2输入: nums = [1], k = 1输出: [1]思路一可以通过nums构造一个pair对数组。一个pair对包括<元素频数,元素值>。通过元素频数进行排序,取最高的k个数。排序的效率为 O(nlogn)...原创 2020-04-29 11:01:48 · 182 阅读 · 0 评论 -
338. 比特位计数
题目给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例1输入: 2输出: [0,1,1]示例2输入: 5输出: [0,1,1,2,1,2]思路给定一个数n,就算0~n每个数二进制1的个数,保存在数组res中。有一个规律,如果k为奇数,那么k-1为偶数,那么k的二进制的最低位比k-1多一个...原创 2020-04-29 10:44:40 · 122 阅读 · 0 评论 -
337. 打家劫舍 III
题目在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例1输入: [3,2,3,...原创 2020-04-29 10:38:02 · 135 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期
题目给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出...原创 2020-04-29 09:53:34 · 111 阅读 · 0 评论 -
322. 零钱兑换
题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例1输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例2输入: coins = [2], amount = 3输出: -1思路看到一个...原创 2020-04-29 09:09:02 · 115 阅读 · 0 评论 -
301. 删除无效的括号
题目删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明输入可能包含了除 ( 和 ) 以外的字符。示例1输入: "()())()"输出: ["()()()", "(())()"]示例2输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例3输入: ")("输出: [""]思路用一个队列保存,每次删除一个括号时的字符...原创 2020-04-29 08:57:41 · 356 阅读 · 0 评论 -
312. 戳气球
题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球...原创 2020-04-29 08:53:27 · 125 阅读 · 0 评论 -
300. 最长上升子序列
题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。思路一动态规划。dp[i]dp[i]dp[i]表示第i个数为结尾的最长上升...原创 2020-04-28 23:08:23 · 110 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例你可以将以下二叉树: ...原创 2020-04-28 22:33:32 · 158 阅读 · 0 评论 -
287. 寻找重复数
题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例1输入: [1,3,4,2,2]输出: 2示例2输入: [3,1,3,4,2]输出: 3说明不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。...原创 2020-04-28 22:00:59 · 140 阅读 · 0 评论 -
283. 移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路使用双指针left、right。left首先指向第一个元素,如果right不为0,那么right把值覆盖到left上,left和right同时...原创 2020-04-28 21:44:05 · 105 阅读 · 0 评论 -
279. 完全平方数
题目给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例1输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例2输入: n = 13输出: 2解释: 13 = 4 + 9.思路用平方数填满n,使得用到的平方数最少。则用动态规划,依次计算填满1,2,…,n需要的最少...原创 2020-04-28 21:37:05 · 126 阅读 · 0 评论 -
240. 搜索二维矩阵 II
题目编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17...原创 2020-04-28 21:10:46 · 132 阅读 · 0 评论 -
239. 滑动窗口最大值
题目给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值---------...原创 2020-04-28 21:05:24 · 153 阅读 · 0 评论 -
238. 除自身以外数组的乘积
题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例输入: [1,2,3,4]输出: [24,12,8,6]思路正着乘一遍,倒着乘一遍。代码class Solution {public: vector<int> pro...原创 2020-04-28 20:58:41 · 114 阅读 · 0 评论 -
236.二叉树的最近公共祖先
题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]分析给定两个节点,在树中找出一颗二叉树中最...原创 2020-01-02 19:56:21 · 157 阅读 · 1 评论 -
647. 回文子串
题目给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例1输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例2输入: "aaa"输出: 6说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".注意输入的字符...原创 2020-04-28 20:44:51 · 116 阅读 · 0 评论 -
621. 任务调度器
题目给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你...原创 2020-04-28 17:55:56 · 111 阅读 · 0 评论 -
617. 合并二叉树
题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例1输入: Tree 1 Tree 2 1 ...原创 2020-04-28 10:19:44 · 158 阅读 · 0 评论 -
581. 最短无序连续子数组
题目给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例1输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明输入的数组长度范围在 [1, 10,000]。输入的数组...原创 2020-04-28 09:55:13 · 106 阅读 · 0 评论 -
560. 和为K的子数组
题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例1输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。通过次数25,231提交次数)思路一...原创 2020-04-27 21:19:44 · 154 阅读 · 0 评论 -
543. 二叉树的直径
题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。思路计算每个节点的最大直径...原创 2020-04-26 23:51:32 · 114 阅读 · 0 评论 -
538. 把二叉搜索树转换为累加树
题目给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18 / ...原创 2020-04-26 22:50:01 · 119 阅读 · 0 评论 -
494. 目标和
题目给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 = 3+1...原创 2020-04-26 22:29:45 · 151 阅读 · 0 评论 -
461. 汉明距离
题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意都是大于0的数。思路两个数直接异或,看二进制中1的个数。代码class Solution {public: int hammingDistance(int x, int y) { int res = 0; int...原创 2020-04-25 10:37:42 · 282 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路因为数组大小...原创 2020-04-25 10:30:00 · 150 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
题目给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串...原创 2020-04-25 09:55:37 · 171 阅读 · 0 评论 -
437. 路径总和 III
题目给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 ...原创 2020-04-24 10:23:04 · 121 阅读 · 0 评论 -
234. 回文链表
题目请判断一个链表是否为回文链表。示例1输入: 1->2输出: false示例2输入: 1->2->2->1输出: true进阶你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路遍历一遍链表,计算长度。找到链表中间位置,遍历到中间位置截断,遍历的过程中,将遍历过的节点反向。链表长度为奇数时,链表断开后,后半部分比前半部分多一...原创 2020-04-24 10:17:27 · 202 阅读 · 0 评论 -
226. 翻转二叉树
题目翻转一棵二叉树。示例输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路递归每个节点交换左右子树代码/** * Definition for a binary tree node. * struct Tree...原创 2020-04-23 11:06:11 · 81 阅读 · 0 评论 -
416. 分割等和子集
题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例1输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例2输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.思路思路一问题是数组中是否可以有两个子集,使得子集元...原创 2020-04-23 11:02:17 · 236 阅读 · 0 评论 -
406. 根据身高重建队列
题目假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。示例输入:[[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-04-20 15:51:10 · 162 阅读 · 0 评论 -
221. 最大正方形
题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4思路用一个数组保存,每个元素作为正方体右下角的元素时,所能得到的最大边长。首先第一行和第一列肯定和二维数组一样。遇到0可以跳过。遇到1,看上面和左面的元素值,上面和左面的元素值都代表自...原创 2020-04-19 23:59:56 · 100 阅读 · 0 评论 -
215. 数组中的第K个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例1输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4思路找第k个最大的元素,假如共有n个元素,则k前面有n-k个数,就等价于找第n-k+1个最小的元素。因为...原创 2020-04-19 23:27:39 · 117 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
#题目实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app...原创 2020-04-19 23:13:29 · 119 阅读 · 0 评论 -
207. 课程表
题目你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例1输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需...原创 2020-04-10 21:28:13 · 144 阅读 · 0 评论 -
206. 反转链表
题目反转一个单链表。示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路用pre指向head的第一个结点,用cur指向head的第二个结点。用node指向cur指向的节点,让cur指向下一个结点。让node指向pre节点,然后再让pre指向node的节点。其实就是将he...原创 2020-04-10 21:21:41 · 147 阅读 · 0 评论