自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 代码随想录算法训练营 | day60 单调栈 84.柱状图中最大的矩形

题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。

2023-12-24 14:04:44 141

原创 代码随想录算法训练营 | day59 单调栈 503.下一个更大元素Ⅱ,42.接雨水

题目:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

2023-12-24 13:35:23 137

原创 代码随想录算法训练营 | day58 单调栈 739.每日温度,496.下一个更大元素Ⅰ

题目说如果不存在对应位置就输出 -1 ,所以result数组如果某位置没有被赋值,那么就应该是是-1,所以就初始化为-1。在遍历nums2的过程中,我们要判断nums2[i]是否在nums1中出现过,因为最后是要根据nums1元素的下标来更新result数组。

2023-12-22 10:42:34 125

原创 代码随想录算法训练营 | day57 动态规划 647.回文子串,516.最长回文子序列

题目:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"提示:输入的字符串长度不会超过 1000。

2023-12-21 15:51:47 139

原创 代码随想录算法训练营 | day56 动态规划 583.两个字符串的删除操作,72.编辑距离

题目:给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"

2023-12-19 18:11:45 79

原创 代码随想录算法训练营 | day55 动态规划 392.判断子序列,115.不同的子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp。

2023-12-18 20:17:30 61

原创 代码随想录算法训练营 | day53 动态规划 1143.最长公共子序列,1035.不相交的线,53.最大子序和

而是dp[6]。在回顾一下dp[i]的定义:包括下标i之前的最大连续子序列和为dp[i]。那么我们要找最大的连续子序列,就应该找每一个i为终点的连续最大子序列。所以在递推公式的时候,可以直接选出最大的dp[i]。

2023-12-17 16:59:14 79

原创 代码随想录算法训练营 | day52 动态规划 300.最长递增子序列,674.最长连续递增子序列,718.最长重复子数组

题目:给你一个整数数组 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。

2023-12-16 15:58:12 39

原创 代码随想录算法训练营 | day51 动态规划 309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

题目:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

2023-12-15 16:19:20 93

原创 代码随想录算法训练营 | day50 动态规划 123.买卖股票的最佳时机Ⅲ,188.买卖股票的最佳时机Ⅳ

题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6 解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。

2023-12-13 11:30:08 79

原创 代码随想录算法训练营 | day49 动态规划 121.买卖股票的最佳时机,122.买卖股票的最佳时机Ⅱ

题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。示例 1:输入:[7,1,5,3,6,4]输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。

2023-12-12 19:51:32 82

原创 代码随想录算法训练营 | day48 动态规划 198.打家劫舍,213.打家劫舍Ⅱ,337.打家劫舍Ⅲ

题目链接 | 文章讲解 | 视频讲解题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例

2023-12-12 18:57:43 303

原创 代码随想录算法训练营 | day46 动态规划 139.单词拆分,背包总结

背包问题是动态规划里的非常重要的一部分,所以我把背包问题单独总结一下,等动态规划专题更新完之后,我们还会在整体总结一波动态规划。关于这几种常见的背包,其关系如下:通过这个图,可以很清晰分清这几种常见背包之间的关系。在讲解背包问题的时候,我们都是按照如下五部来逐步分析,相信大家也体会到,把这五部都搞透了,算是对动规来理解深入了。确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。

2023-12-10 16:53:53 119

原创 代码随想录算法训练营 | day45 动态规划 完全背包,70.爬楼梯进阶,322.零钱兑换,279.完全平方数

题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。输入描述:输入共一行,包含两个正整数,分别表示n, m输出描述:输出一个整数,表示爬到楼顶的方法数。输入示例:3 2输出示例:3提示:当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。此时你有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶段。

2023-12-08 17:29:45 111

原创 代码随想录算法训练营 | day44 动态规划 完全背包,518.零钱兑换Ⅱ,377.组合总和Ⅳ

题目:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。

2023-12-07 21:42:55 37

原创 代码随想录算法训练营 | day43 动态规划 01背包,1049.最后一块石头的重量Ⅱ,494.目标和,474.一和零

题目:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。

2023-12-06 16:10:11 30

原创 代码随想录算法训练营 | day42 动态规划 01背包,416.分割等和子集

首先从dp[i] [j]的定义出发,如果背包容量j为0的话,即dp[i] [0],无论是选取哪些物品,背包价值总和一定为0。如图:在看其他情况。状态转移方程 dp[i] [j] = max(dp[i - 1] [j], dp[i - 1] [j - weight[i]] + value[i]);可以看出i 是由 i-1 推导出来,那么i为0的时候就一定要初始化。dp[0] [j],即:i为0,存放编号0的物品的时候,各个容量的背包所能存放的最大价值。

2023-12-05 17:04:50 258

原创 代码随想录算法训练营 | day41 动态规划 343.整数拆分,96.不同的二叉搜索树

题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。

2023-12-04 15:33:08 72

原创 代码随想录算法训练营 | day39 动态规划 62.不同路径,63.不同路径Ⅱ

题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 2, n = 3输出:3解释: 从左上角开始,总共有 3 条路径可以到达右下角。

2023-12-02 11:58:51 680

原创 代码随想录算法训练营 | day38 动态规划,509.斐波那契数,70.爬楼梯,746.使用最小花费爬楼梯

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2023-12-02 11:56:33 71

原创 代码随想录算法训练营 | day37 贪心算法,738.单调递增的数字,968.监控二叉树

题目链接 | 文章讲解 | 视频讲解题目:给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^9] 范围内的一个整数。

2023-11-30 15:21:22 55

原创 代码随想录算法训练营 | day36 贪心算法,435.无重叠区间,763.划分字母区间,56.合并区间

此时问题就是要求非交叉区间的最大个数。这里记录非交叉区间的个数还是有技巧的,如图:区间,1,2,3,4,5,6都按照右边界排好序。当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?就是取 区间1 和 区间2 右边界的最小值,因为这个最小值之前的部分一定是 区间1 和区间2 的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。接下来就是找大于区间1结束位置的区间,是从区间4开始。

2023-11-29 11:23:07 55

原创 代码随想录算法训练营 | day35 贪心算法 ,860.柠檬水找零,406.根据身高重建队列,452.用最少数量的箭引爆气球

整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]插入的过程:插入[7,0]:[[7,0]]插入[7,1]:[[7,0],[7,1]]插入[6,1]:[[7,0],[6,1],[7,1]]插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]

2023-11-28 18:51:25 53

原创 代码随想录算法训练营 | day33 贪心算法 1005.K次取反后最大化的数组和,134.加油站,135.分发糖果

题目:给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。

2023-11-27 20:32:11 45

原创 代码随想录算法训练营 | day32 贪心算法,122.买卖股票的最佳时机 Ⅱ,55.跳跃游戏,45.跳跃游戏Ⅱ

局部最优推出全局最优,找不出反例,试试贪心!如图:i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。如果 cover 大于等于了终点下标,直接 return true 就可以了。代码如下://覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的//在覆盖范围内更新最大的覆盖范围i++) {

2023-11-25 12:06:10 17

原创 代码随想录算法训练营 | day31 贪心算法,455.分发饼干,376.摆动序列,53.最大子序列和

所以这也是为什么很多同学通过(accept)了贪心的题目,但都不知道自己用了贪心算法,

2023-11-24 21:45:32 27

原创 代码随想录算法训练营 | day30 回溯总结,332.重新安排行程,51.N皇后,37.解数独

本题其实可以算是一道hard的题目了,关于本题的难点我在文中已经列出了。如果单纯的回溯搜索(深搜)并不难,难还难在容器的选择和使用上。本题其实是一道深度优先搜索的题目,但是我完全使用回溯法的思路来讲解这道题题目,算是给大家拓展一下思维方式,其实深搜和回溯也是分不开的,毕竟最终都是用递归。代码随想录 (programmercarl.com)回溯专题汇聚为一张图:这个图是莫非毛,所画,总结的非常好,分享给大家。

2023-11-24 11:24:52 81

原创 代码随想录算法训练营 | day29 回溯 491.递增子序列,46.全排列,47.全排列 II

代码如下:i++){if(!continue;//法二:使用map//结果集合//路径集合return res;// 注意这里不要加return,要取树上的节点i++){if(!continue;// 使用过了当前数字continue;

2023-11-22 17:28:15 24

原创 代码随想录算法训练营 | day28 回溯 93.复原IP地址,78.子集,90.子集Ⅱ

题目:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例 1:输入:s = "25525511135"

2023-11-21 16:49:25 35

原创 代码随想录算法训练营 | day27 回溯 39.组合总和,40.组合总和II,131.分割回文串

在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。单层搜索的逻辑。

2023-11-20 20:34:26 52

原创 代码随想录算法训练营 | day25 回溯 216.组合总和 Ⅲ,17.电话号码的字母组合

题目:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

2023-11-19 18:18:35 44

原创 代码随想录算法训练营 | day24 回溯 77.组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。组合问题是回溯法解决的经典问题,我们开始的时候给大家列举一个很形象的例子,就是n为100,k为50的话,直接想法就需要50层for循环。从而引出了回溯法就是解决这种k层for循环嵌套的问题。然后进一步把回溯法的搜索过程抽象为树形结构,可以直观的看出搜索的过程。

2023-11-19 18:16:07 53

原创 代码随想录算法训练营 | day23 二叉树 669.修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-11-17 15:36:43 57

原创 代码随想录算法训练营 | day22 二叉树 235.二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

首先在二叉搜索树中的插入操作,大家不用恐惧其重构搜索树,其实根本不用重构。然后在递归中,我们重点讲了如何通过递归函数的返回值完成新加入节点和其父节点的赋值操作,并强调了搜索树的有序性。最后依然给出了迭代的方法,迭代的方法就需要记录当前遍历节点的父节点了,这个和没有返回值的递归函数实现的代码逻辑是一样的。读完本篇,大家会发现二叉搜索树删除节点比增加节点复杂的多。因为二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整。

2023-11-16 16:07:37 34

原创 代码随想录算法训练营 | day21 二叉树 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236.二叉树的最近祖宗

这道题目刷过的同学未必真正了解这里面回溯的过程,以及结果是如何一层一层传上去的。那么我给大家归纳如下三点求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

2023-11-15 20:35:40 38

原创 代码随想录算法训练营 | day20 二叉树 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

题目:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :提示:给定的数组的大小在 [1, 1000] 之间。

2023-11-13 21:06:26 19

原创 代码随想录算法训练营 | day18 二叉树

找到。

2023-11-12 15:12:43 60 1

原创 代码随想录算法训练营 | day17 二叉树

题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false。

2023-11-11 14:06:21 30 1

原创 代码随想录算法训练营 | day16 二叉树 104.二叉树的最大深度 & 559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3。

2023-11-09 16:25:52 56 1

原创 代码随想录算法训练营 | day15 二叉树

题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。

2023-11-09 11:15:16 31 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除