![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode中不熟悉的题
超人不会飞、
这个作者很懒,什么都没留下…
展开
-
分割整数构成字母字符串(动态规划)
分割整数构成字母字符串(动态规划)题目:一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例 2:输入: "226"输出: 3解释:...原创 2020-02-27 13:53:34 · 644 阅读 · 0 评论 -
动态规划----编辑距离
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符思路:利用动态规划的思想,新建一个dp[m + 1][n + 1]数组,dp[i][j]表示word1中前 i 个字符和word2中前j个字符的最少操作数,那么dp[i][j]依赖于dp[i - 1][j - 1...原创 2019-11-30 14:13:44 · 144 阅读 · 0 评论 -
所有股票问题的思路----本质
一、穷举框架比如说这个问题,每天都有三种「选择」:买入、卖出、无操作,我们用 buy, sell, rest 表示这三种选择。但问题是,并不是每天都可以任意选择这三种选择的,因为 sell 必须在 buy 之后,buy 必须在 sell 之后。那么 rest 操作还应该分两种状态,一种是 buy 之后的 rest(持有了股票),一种是 sell 之后的 rest(没有持有股票)。而且别忘了,我们...转载 2019-11-27 11:44:59 · 169 阅读 · 0 评论 -
所有股票问题----例题总结
1.最佳买卖股票时机–含冷冻期–相当于无穷此交易次数给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出:...原创 2019-11-27 19:22:46 · 463 阅读 · 0 评论 -
背包问题----单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。示例:示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "app...原创 2019-11-26 20:12:40 · 337 阅读 · 0 评论 -
0-1背包问题-----目标和
给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 = 3+...原创 2019-11-24 17:03:48 · 343 阅读 · 0 评论 -
0-1背包问题,以及空间优化
什么是0-1背包问题?有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v。定义一个二维数组 dp 存储最大价值,其中 dp[ i ][ j ] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:第 i 件物品没添加到背包,总体积不超过 j...原创 2019-11-24 16:22:01 · 362 阅读 · 0 评论 -
分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.思路:1.首先求数组总和sum,如果sum为奇数,那么肯定...原创 2019-11-24 10:05:20 · 375 阅读 · 0 评论 -
最长摆动序列---如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。示例 1:输入: [1,7,4,9,2,5]输出: 6 解释: 整个序列均为摆动序列。示例 2:输入: [1,17,5,10,13,15,10,5,16,8]输出: 7解释: 这个序列包含几个长度为 7 摆动序列,其中一个可为[1,1...原创 2019-11-23 21:41:37 · 868 阅读 · 0 评论 -
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。思路:第一种思路:当分解式中拆分成4以上时,比如5,那么再次拆分为 2 * 3 = ...原创 2019-11-18 11:25:45 · 7276 阅读 · 1 评论 -
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7示例:A = [1, 2, 3, 4]返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4...原创 2019-11-17 19:42:11 · 1299 阅读 · 0 评论 -
数独问题---编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗
编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。思路:同样是采用回溯法,用三个数组,分别保存每一次填完数字之后,所在行,列,小方块的记录。并且数组长度都为 int[9][10],设置这种长度的原...原创 2019-11-12 10:01:55 · 2304 阅读 · 0 评论 -
N皇后问题-n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。相互攻击就是说:在同一行、同一列或者在同一斜线方向时,不能同时存在两个皇后。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q...原创 2019-11-11 20:54:21 · 4566 阅读 · 0 评论 -
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[ ...原创 2019-11-09 23:23:36 · 2427 阅读 · 1 评论 -
给定一个没有重复数字的序列,返回其所有可能的全排列。
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:用一个boolean[] visited数组标记未被访问的位置,然后for循环遍历这个数组,找到还没有被访问过的位置,加入队列。class Solution { List...原创 2019-11-08 21:15:06 · 3220 阅读 · 0 评论 -
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路:利用回溯法,找到第一个数字,对应的字符串,然后依次遍历,并且递归调用回溯方法。class Solutio...原创 2019-11-08 12:06:56 · 2884 阅读 · 0 评论 -
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。 规定水流只能按照上、下、左、右四个方向流动,且只能从
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。给定下面的 5x5 矩阵: 太平洋 ~ ~ ~ ~ ~ ...原创 2019-11-07 21:25:33 · 375 阅读 · 0 评论 -
最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路:直接看下面的图和代码:class Solution { public int lengthOfLIS(int[] nums) { int[] dp = new in...原创 2019-11-05 10:52:15 · 148 阅读 · 0 评论 -
583-两个字符串的删除操作
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例 1:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"方法 3:最长公共子序列 - 动态规划 [Accepted]算法另一个获得 lcs 值的办法是动态规划。我们来看看它的实现...原创 2019-11-05 10:08:33 · 317 阅读 · 0 评论 -
给定一个二叉树,原地将它展开为链表。
给定一个二叉树,原地将它展开为链表。例如,给定二叉树1/ 2 5/ \ 3 4 6将其展开为:123456思路:可以发现展开的顺序其实就是二叉树的先序遍历。算法和 94 题中序遍历的 Morris 算法有些神似,我们需要两步完成这道题。将左子树插入到右子树的地方将原来的右子树接到左子树的最右边节点考虑新的右子树的根节点,一直重复上边的...原创 2019-11-03 13:27:44 · 772 阅读 · 0 评论 -
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思路:对问题建模:将整个问题变成一个图论问题。从n到0,每个数字代表一个节点;;如果两个数 x...原创 2019-11-02 10:57:10 · 5856 阅读 · 0 评论 -
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。 一条从左上角到右下角、长度为 k 返回这条从左上角到右下角的最短畅通路径的长度。如果不存在这样的路径,返回 -1 。
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。 一条从左上角到右下角、长度为 k 返回这条从左上角到右下角的最短畅通路径的长度。如果不存在这样的路径,返回 -1 。利用BFS的思想,并且注意开始的字符不为0的情况import javafx.util.Pair;class Solution { public static int shortest...原创 2019-10-29 12:20:27 · 1509 阅读 · 0 评论 -
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。 来源:力扣(LeetCode) 链接
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: "2-1-1"输出: [0, 2]解释: ((2-1)-1) = 0 (2-(1-1)) = 2示例 2:输入: "2*3-4*5"输出: [-34, -14, -10, -10, 10]解释: (...原创 2019-10-25 20:13:21 · 3172 阅读 · 0 评论 -
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], targ...原创 2019-10-17 17:44:23 · 1959 阅读 · 0 评论 -
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 来源:力扣(LeetCode) 链接
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。思路:利用二分法,求解平方根public int mySqrt(int x) {...原创 2019-10-16 10:53:04 · 4475 阅读 · 0 评论 -
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。 数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。数组里字母的顺序是循环的。举个例子,如果目标字母target = ‘z’ 并且有序数组为 letters = [‘a’, ‘b’],则答案返回 ‘a’。输入:letters = [“c”, “f”, “j”]target = “a”输出: “c”输入:letters ...原创 2019-10-15 22:15:08 · 298 阅读 · 0 评论 -
题目描述:判断一个数组是否能只修改一个数就成为非递减数组。
题目描述:判断一个数组是否能只修改一个数就成为非递减数组。示例 1:输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: [4,2,1]输出: False解释: 你不能在只改变一个元素的情况下将其变为非递减数列。思路:在出现 nums[i] < nums[i - 1] 时,需要考虑的是应该修改数组的哪个数,...原创 2019-10-14 16:48:52 · 523 阅读 · 0 评论 -
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 注意: 总人数少于1100
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(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]]...原创 2019-10-13 15:50:09 · 5010 阅读 · 0 评论 -
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...原创 2019-10-07 11:25:01 · 711 阅读 · 0 评论 -
给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c)。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。 返回
给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| +...原创 2019-10-07 11:25:11 · 724 阅读 · 0 评论