力扣刷题
文章平均质量分 56
TABE_
这个作者很懒,什么都没留下…
展开
-
2021-12-22 309. 买卖股票时机含冷冻期(动态规划)
注:题目:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]题解:相对于动态规划:122.买卖股票的最佳时机II (opens new原创 2021-12-22 22:05:16 · 93 阅读 · 0 评论 -
2022-1-19 84. 柱状图中最大的矩形(单调栈)
注:题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:输入: heights = [2,4]输出: 4提示:1 <= heights.length <=1050 <= heights[i] <= 104题解:本题是要找每个柱子左右两边第一原创 2022-01-20 16:46:17 · 301 阅读 · 0 评论 -
2022-1-18 42. 接雨水(单调栈)
注:题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length1 <= n <=原创 2022-01-18 22:13:18 · 1125 阅读 · 0 评论 -
2022-1-16 503. 下一个更大元素 II(单调栈)
注:题目:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。注意: 输入数组的长度不会超过 10000。题解:原创 2022-01-16 15:39:58 · 94 阅读 · 0 评论 -
2022-1-15 496. 下一个更大元素 I(单调栈)
注:题目:nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1原创 2022-01-16 15:09:57 · 160 阅读 · 0 评论 -
2022-1-11 739. 每日温度(单调栈)
注:题目:请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]示例 3:输入: temperatures = [30,60,90]输出: [1,1,0]原创 2022-01-11 22:10:27 · 154 阅读 · 0 评论 -
2022-1-10 516. 最长回文子序列(动态规划)
注:题目:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。示例 2:输入:s = “cbbd”输出:2解释:一个可能的最长回文子序列为 “bb” 。提示:1 <= s.length <= 1000s 仅由小写英文字母组成题解:确定dp数组(dp table)以及下原创 2022-01-10 22:05:32 · 118 阅读 · 0 评论 -
2022-1-7 647. 回文子串(动态规划)
注:题目:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:s = “abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:s = “aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:1 &l原创 2022-01-09 21:14:57 · 90 阅读 · 0 评论 -
2022-1-6 72. 编辑距离(动态规划)
注:题目:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “i原创 2022-01-06 22:03:26 · 89 阅读 · 0 评论 -
2022-1-5 583. 两个字符串的删除操作(动态规划)
注:题目:给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"提示:给定单词的长度不超过500。给定单词中的字符只含有小写字母。题解:本题和动态规划:115.不同的子序列 (opens new window)相比,其实就是两个字符串可以都可以删除了,情况虽说复杂一些,但整体思路是不变原创 2022-01-05 22:06:03 · 116 阅读 · 0 评论 -
2022-1-4 115. 不同的子序列(动态规划)
注:题目:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:s = “rabbbit”, t = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 s 中得到 “rabbit” 的方案。rabbbitrabb原创 2022-01-04 22:07:22 · 108 阅读 · 0 评论 -
2021-12-31 392. 判断子序列(动态规划)
注:题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?示例 1:输入:s = “abc”, t = “ahbgdc”输出:true示例 2:输入:原创 2021-12-31 16:42:10 · 243 阅读 · 0 评论 -
2021-12-31 53. 最大子数组和(动态规划)
注:题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <= nums.length <= 105-104 <原创 2021-12-31 16:37:23 · 246 阅读 · 0 评论 -
2021-12-30 1035. 不相交的线(动态规划)
注:题目:在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。示例 1:输入:nums1 = [1,4,2], nums2 = [1,2,4]输出:2解释:可以画原创 2021-12-31 16:15:25 · 298 阅读 · 0 评论 -
2021-12-30 1143. 最长公共子序列(动态规划)
注:题目:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2原创 2021-12-30 22:10:18 · 91 阅读 · 0 评论 -
2021-12-29 718. 最长重复子数组(动态规划)
注:题目:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入: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数组(dp table)以及下标的含义dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数原创 2021-12-29 22:01:52 · 71 阅读 · 0 评论 -
2021-12-28 674. 最长连续递增序列(动态规划)
注:题目:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。示例 1:输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5], 长原创 2021-12-28 22:03:49 · 91 阅读 · 0 评论 -
2021-12-27 300. 最长递增子序列(动态规划)
注:题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7原创 2021-12-27 21:53:54 · 89 阅读 · 0 评论 -
2021-12-23 714. 买卖股票的时机含手续费(动态规划)
注:题目:给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入:prices = [1, 3, 2, 8, 4, 9], fee = 2输出:8解释:能够达到的最大利润:在此处买入 p原创 2021-12-23 19:21:31 · 102 阅读 · 0 评论 -
2021-12-21 188. 买卖股票的最佳时机 IV(动态规划)
注:题目:给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:k = 2, prices = [2,4,1]输出:2解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。示例 2:输入:k原创 2021-12-21 21:51:38 · 106 阅读 · 0 评论 -
2021-12-20 123. 买卖股票的时机 III(动态规划)
注:题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (原创 2021-12-20 22:04:55 · 87 阅读 · 0 评论 -
2021-12-17 122. 买卖股票的时机 II(动态规划)
注:题目:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票原创 2021-12-19 19:55:34 · 91 阅读 · 0 评论 -
2021-12-16 121. 买卖股票的时机(动态规划)
注:题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不原创 2021-12-17 10:02:44 · 105 阅读 · 0 评论 -
2021-12-15 337. 打家劫舍 III(动态规划)
注:题目:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3 / \ 2 3 \ \原创 2021-12-15 21:50:59 · 104 阅读 · 0 评论 -
2021-12-14 213. 打家劫舍 II(动态规划)
注:题目:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),原创 2021-12-14 18:33:59 · 1338 阅读 · 0 评论 -
2021-12-13 139. 单词拆分(动态规划)
注:题目:给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定 s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDict = [“apple”, “pen原创 2021-12-13 22:40:53 · 465 阅读 · 0 评论 -
2021-12-10 279. 完全平方数(动态规划)
注:题目:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4 +原创 2021-12-12 14:53:35 · 204 阅读 · 0 评论 -
2021-12-9 322. 零钱兑换(动态规划)
注:题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount原创 2021-12-09 20:02:28 · 691 阅读 · 0 评论 -
2021-12-8 518. 零钱兑换 II(动态规划)
注:题目:给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入:amount = 3, coin原创 2021-12-08 21:59:22 · 102 阅读 · 0 评论 -
2021-12-7 474. 一和零(动态规划)
注:题目:给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。其原创 2021-12-07 22:47:17 · 349 阅读 · 0 评论 -
2021-12-6 494. 目标和(动态规划)
注:题目:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和原创 2021-12-06 22:19:52 · 325 阅读 · 0 评论 -
2021-12-3 1049. 最后一块石头的重量 II(动态规划)
注:题目:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。示例 1:输入:st原创 2021-12-03 16:56:53 · 148 阅读 · 0 评论 -
2021-12-1 96. 不同的二叉搜索树(动态规划)
注:题目:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1提示:1 <= n <= 19题解:思路我们应该先举几个例子,画画图,看看有没有什么规律,如图:n为1的时候有一棵树,n为2有两棵树,这个是很直观的。来看看n为3的时候,有哪几种情况。当1为头结点的时候,其右子树有两个节点,看这两个节点的布局,是不是和原创 2021-12-01 22:46:41 · 333 阅读 · 0 评论 -
2021-11-30 343. 整数拆分(动态规划)
注:题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。题解:动态规划动规五部曲,分析如下:确定dp数组(dp table)以及下标的含义dp[i]:分拆数字i,可以得到的最大乘积为dp原创 2021-11-30 22:34:26 · 604 阅读 · 1 评论 -
2021-11-29 63. 不同路径 II(动态规划)
注:题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不原创 2021-11-29 22:04:53 · 101 阅读 · 0 评论 -
2021-11-28 746. 使用最小花费爬楼梯(动态规划)
注:题目:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入:cost原创 2021-11-28 18:13:44 · 92 阅读 · 0 评论 -
2021-11-26 968. 监控二叉树(贪心算法)
注:题目:给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。提示:给定树的节点数的范围是 [1, 1000]。每个节点的值都原创 2021-11-28 16:55:07 · 121 阅读 · 0 评论 -
2021-12-15 714. 买卖股票的时机含手续费(贪心算法)
注:题目:给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入:prices = [1, 3, 2, 8, 4, 9], fee = 2输出:8解释:能够达到的最大利润:在此处买入 p原创 2021-11-25 22:07:19 · 188 阅读 · 1 评论 -
2021-11-24 738. 单调递增的数字(贪心算法)
注:题目:给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^9] 范围内的一个整数。题解:思路我们可以从高到低按位构造这个小于等于 n 的最大单调递增的原创 2021-11-24 22:16:52 · 272 阅读 · 0 评论 -
2021-11-23 56. 合并区间(贪心算法)
注:题目:题解:原创 2021-11-23 23:21:29 · 105 阅读 · 0 评论