![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LC题解
IzuruKamuku
这个作者很懒,什么都没留下…
展开
-
416. 分割等和子集
416. 分割等和子集难度中等537收藏分享切换为英文接收动态反馈给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.思路:我们可以巧妙的将问原创 2020-10-11 23:11:27 · 136 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列难度中等109收藏分享切换为英文接收动态反馈输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]限制:1 <= s 的长度 <= 8深度优先搜索,可以在每一位上维护一个set集合防止该位出现相同的字符导致重复,达到剪枝的目的。package LeetCode;impor原创 2020-09-30 23:25:33 · 145 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
剑指 Offer 45. 把数组排成最小的数难度中等101收藏分享切换为英文关注反馈输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459"提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0原创 2020-09-28 20:03:47 · 150 阅读 · 0 评论 -
583,Offer12, Offer26
#583,Offer12, Offer26538. 把二叉搜索树转换为累加树难度简单378收藏分享切换为英文关注反馈给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 原始二叉搜索树: 5 / \ 2 13输出: 转换为累加树: 18原创 2020-09-21 20:20:54 · 103 阅读 · 0 评论 -
[LCP 23. 魔术排列]
[LCP 23. 魔术排列]秋日市集上,魔术师邀请小扣与他互动。魔术师的道具为分别写有数字 1~N 的 N 张卡牌,然后请小扣思考一个 N 张卡牌的排列 target。魔术师的目标是找到一个数字 k(k >= 1),使得初始排列顺序为 1~N 的卡牌经过特殊的洗牌方式最终变成小扣所想的排列 target,特殊的洗牌方式为:第一步,魔术师将当前位于 偶数位置 的卡牌(下标自 1 开始),保持 当前排列顺序 放在位于 奇数位置 的卡牌之前。例如:将当前排列 [1,2,3,4,5] 位于偶数位置的原创 2020-09-20 15:32:00 · 344 阅读 · 0 评论 -
[133. 克隆图]
[133. 克隆图]给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。原创 2020-08-12 13:17:54 · 88 阅读 · 0 评论 -
[329. 矩阵中的最长递增路径]
[329. 矩阵中的最长递增路径]给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4 解释: 最长递增路原创 2020-07-26 22:29:47 · 93 阅读 · 0 评论 -
[410. 分割数组的最大值]
[410. 分割数组的最大值]给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为1原创 2020-07-25 16:33:33 · 95 阅读 · 0 评论 -
[312. 戳气球]
[312. 戳气球]有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1] = nums[n] = 1,但原创 2020-07-20 00:26:22 · 98 阅读 · 0 评论 -
[97. 交错字符串]
[97. 交错字符串]给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false思路:经典的动态规划问题令 dp[i][j] 为 s1的前i个字符和s2的前j个字符是否符合, dp[0][0] == true原创 2020-07-18 12:50:32 · 263 阅读 · 0 评论 -
数的三种遍历方式(迭代法)
数的三种遍历方式(迭代法)思路:使用栈帮助存储树节点先序遍历public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Stack<TreeNode> s = new Stack<>(); //防止输入为空 if(root != null) {原创 2020-07-18 11:16:07 · 740 阅读 · 0 评论 -
[96. 不同的二叉搜索树]
[96. 不同的二叉搜索树]给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1原创 2020-07-15 11:25:35 · 74 阅读 · 0 评论 -
[5211. 概率最大的路径]
[5211. 概率最大的路径]给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] = [a, b] 表示连接节点 a 和 b 的一条无向边,且该边遍历成功的概率为 succProb[i] 。指定两个节点分别作为起点 start 和终点 end ,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。如果不存在从 start 到 end 的路径,请 返回 0 。只要答案与标准答案的误差不超过 1e-5 ,就会被视作正确答案。示例 1:原创 2020-07-12 14:55:00 · 234 阅读 · 0 评论 -
[面试题 17.13. 恢复空格]
[面试题 17.13. 恢复空格]哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。原创 2020-07-09 14:26:23 · 82 阅读 · 0 评论 -
[5455. 最多 K 次交换相邻数位后得到的最小整数]
[5455. 最多 K 次交换相邻数位后得到的最小整数]给你一个字符串 num 和一个整数 k 。其中,num 表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 。你可以交换这个整数相邻数位的数字 最多 k 次。请你返回你能得到的最小整数,并以字符串形式返回。示例 1:输入:num = "4321", k = 4输出:"1342"解释:4321 通过 4 次交换相邻数位得到最小整数的步骤如上图所示。示例 2:输入:num = "100", k = 1输出:"010"原创 2020-07-05 15:53:55 · 488 阅读 · 0 评论 -
[32. 最长有效括号]
[32. 最长有效括号]给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"思路:看到括号匹配第一想法就是栈模拟,但是他求的是连续的子串,很容易就想到动态规划,思路见注释public int longestValidParentheses(String s) { int res =原创 2020-07-04 13:06:38 · 76 阅读 · 0 评论 -
[378. 有序矩阵中第K小的元素]
[378. 有序矩阵中第K小的元素]给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。思路 : 在Matrix[0][0]~Matrix[length-1][length-1]之间二分查找一个数n, 遍历数组如果小于等于n的个数大于K原创 2020-07-02 12:07:01 · 96 阅读 · 0 评论 -
[718. 最长重复子数组]
[718. 最长重复子数组]给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释: 长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100思路:动态规划 dp[i] [j] 表示以i, j 为结尾的连续公共子数组那么: dp[i][j] = A[原创 2020-07-01 11:22:30 · 115 阅读 · 0 评论 -
[面试题 16.18. 模式匹配]
[面试题 16.18. 模式匹配]你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。示例 1:输入: pattern = "abba", value = "dogca原创 2020-06-22 12:19:43 · 144 阅读 · 0 评论 -
[124. 二叉树中的最大路径和](
[124. 二叉树中的最大路径和](给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42思路:分治+递归二叉树的最大值等于原创 2020-06-21 22:03:26 · 107 阅读 · 0 评论 -
[1014. 最佳观光组合]
[1014. 最佳观光组合]给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。示例:输入:[8,1,5,2,6]输出:11解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11提示:2 <= A.l原创 2020-06-17 13:51:53 · 73 阅读 · 0 评论 -
[1300. 转变数组后最接近目标值的数组和]
[1300. 转变数组后最接近目标值的数组和]给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。示例 1:输入:arr = [4,9,3], target = 10输出:3解释:当选择 value 为 3 时,数组会变成原创 2020-06-14 15:46:50 · 74 阅读 · 0 评论 -
[多数之和]
[15. 三数之和]给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。**注意:**答案中不可以包含重复的三元组。基本都是暴力+剪枝优化示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]public List<List<Integer>>原创 2020-06-12 12:50:02 · 125 阅读 · 0 评论 -
Q739.每日温度
Q739.每日温度根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路一:单调栈(正向遍历)publi原创 2020-06-11 12:14:16 · 101 阅读 · 0 评论 -
面试题46. 把数字翻译成字符串
面试题46. 把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”提示:0 <= num < 231思路:动态规划pub原创 2020-06-09 14:04:43 · 75 阅读 · 0 评论 -
[990. 等式方程的可满足性]--并查集
[990. 等式方程的可满足性]–并查集给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!=b"。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。示例 1:输入:["a==b","b!=a"]输出:false解释:如果我们指定,a = 1 且 b = 1,那么可以满足第一个方程,但无原创 2020-06-08 13:08:27 · 81 阅读 · 0 评论 -
[128. 最长连续序列]
[128. 最长连续序列]给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。思路:hash表+枚举,我们先用hash Set存储每一个数,再遍历每一个数i为起始位置时,查找是否存在i+1,i+2,。。。来找到最大长度,但并不需要枚举每一个i,对于一个i如果存在 i-1,则没有必要枚举它,应为无论如何,它一定包含在 i-1为起始原创 2020-06-06 13:05:02 · 71 阅读 · 0 评论 -
[238. 除自身以外数组的乘积]
[238. 除自身以外数组的乘积]给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]**提示:**题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请**不要使用除法,**且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成原创 2020-06-04 16:58:12 · 59 阅读 · 0 评论 -
[837. 新21点]
[837. 新21点]爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例 1**:**输入:N = 10, K = 1, W = 10输出:1.00000说明:爱丽丝得到一张卡,然后停止。示例原创 2020-06-03 18:51:04 · 92 阅读 · 0 评论