自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day60 图论章节刷题Part10(Floyd 算法、A * 算法)

思路:本题是多源最短路问题,使用Floyd算法求解。Floyd 算法对边的权值正负没有要求,核心思想是动态规划。我们使用动规五部曲来理解和应用Floyd算法:1、确定dp数组(dp table)以及下标的含义我们用 grid数组来存图,那就把dp数组命名为 grid。grid[i][j][k] = m,表示 节点i 到 节点j 以[1…k] 集合为中间节点的最短距离为m。

2024-11-12 12:35:30 1362

原创 day59 图论章节刷题Part10(Bellman_ford 队列优化算法-SPFA、bellman_ford之判断负权回路、bellman_ford之单源有限最短路)

思路: Bellman_ford 算法每次松弛都是对所有边进行松弛,但真正有效的松弛是基于已经计算过的节点做的松弛。因此优化的思路是只对上一次松弛更新过的节点作为出发节点所连接的边进行松弛就够了。所以我们需要记录上次松弛的时候更新过的节点,一般用队列来记录(栈也可以)。同时,在加入队列的过程可以有一个优化,用visited数组记录已经在队列里的元素,已经在队列的元素不用重复加入。

2024-11-10 19:41:42 615

原创 day58 图论章节刷题Part09(dijkstra(堆优化版)、Bellman_ford 算法)

dijkstra(堆优化版)朴素版的dijkstra解法的时间复杂度为 O(n^2),时间复杂度只和 n(节点数量)有关系。如果n很大的话,可以从边的角度来考虑。因为是稀疏图,从边的角度考虑的话,我们在堆优化算法中最好使用邻接表来存储图,这样不会造成空间的浪费。同时直接遍历边,通过堆(小顶堆)对边进行排序,选择距离源点最近的节点。时间复杂度:O(ElogE) ,E 为边的数量- logE是小顶堆的时间复杂度空间复杂度:O(N + E) ,N 为节点的数量,邻接表:O(n+e)、最短距离数组:O(n)、

2024-11-10 10:29:13 1528

原创 day57 图论章节刷题Part08(拓扑排序、dijkstra(朴素版))

思路:拓扑排序是经典的图论问题。给出一个有向图,把有向图转成线性的排序就叫拓扑排序,拓扑排序也要检测有向图是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的,所以拓扑排序也是图论中判断有向无环图的常用方法。实现拓扑排序的算法有两种:卡恩算法(BFS)和DFS。一般来说只需要掌握 BFS (广度优先搜索)就可以了。应用场景:大学排课,先上A课才能上B课,上了B课才能上C课,上了A课才能上D课等等,要求规划出一条完整的上课顺序。

2024-11-09 20:45:38 1085

原创 day55 图论章节刷题Part07([53.寻宝]prim算法、kruskal算法)

使用最小生成树的方法解决将所有节点连接起来所需的最小路径问题。

2024-11-09 15:49:23 878

原创 day54 图论章节刷题Part06(108.冗余连接、109.冗余连接II)

思路:从前向后遍历每一条边,边的两个节点如果不在同一个集合,就加入集合;如果边的两个节点已经出现在同一个集合里,说明边的两个节点已经连在一起了,再加入这条边一定会出现环。

2024-11-07 22:00:33 486

原创 day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)

将三个元素A,B,C (分别是数字)放在同一个集合,其实就是将三个元素连通在一起,只需要用一个一维数组来表示,即:father[A] = B,father[B] = C (有向连通图)。对ABC进行寻根,如果都是C,说明在同一个集合里。此时需要初始化father[C] = C。

2024-11-07 20:15:12 730

原创 day52 图论章节刷题Part04(110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长 )

广搜和深搜的提高。

2024-11-07 15:16:18 695

原创 day51 图论章节刷题Part03(101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿)

思路:要找不靠边缘的陆地面积,可以将靠边缘的陆地且相邻的陆地都变成海洋,然后再去重新遍历地图 统计此时还剩下的陆地。

2024-11-05 16:19:51 551

原创 day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)

前段时间论文开题落下了很多进度,今天开始会尽快赶上。

2024-11-04 18:13:23 719

原创 day48 图论章节刷题Part01(深搜理论基础、98. 所有可达路径、广搜理论基础)

二叉树的递归法就是dfs,而二叉树的迭代法就是bfs(广度优先搜索)与二叉树中的递归三部曲和回溯算法中的回溯三部曲一样,深搜也可以以三部曲的形式进行分析:1、确认递归函数,参数一般情况,深搜需要 二维数组数组结构保存所有路径,需要一维数组保存单一路径,这种保存结果的数组可以定义一个全局变量,避免让我们的函数参数过多。2、确认终止条件终止条件很重要,死循环,栈溢出等这些问题都是因为终止条件没有想清楚。终止添加不仅是结束本层递归,同时也是收获结果的时候。

2024-10-19 00:55:21 920

原创 leetcode 刷题day44动态规划Part13( 647. 回文子串、516.最长回文子序列)

动态规划完结啦!

2024-10-16 13:10:37 1161

原创 leetcode 刷题day43动态规划Part12(115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离)

编辑距离的题目有点难,但用动态规划求解的很巧妙,还蛮有趣的!

2024-10-15 15:27:16 1214

原创 leetcode 刷题day42动态规划Part11(1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列)

两个数组对应相同且连续,所以递推公式是dp[i-1][j-1]+1。最长公共子序列不要求连续但要求相对顺序,差别主要在于递推公式。对于该题主要有两大情况:text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同。

2024-10-14 11:25:27 1587

原创 leetcode 刷题day41动态规划Part10(300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组)

思路:根据递归五部曲进行分析。1、dp[i]的定义dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。2、递推公式位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。3、dp[i]的初始化每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1.4、遍历顺序dp[i] 是有0到i-1各个位置的最长递增子序列 推导而来,从前向后遍历。j遍历0到i-1,前后遍历都可以,默认习惯 从前向后遍历。5、举例推导dp数组。

2024-10-12 07:59:42 559

原创 leetcode 刷题day40动态规划Part09 买卖股票(188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费)

思路:III是最多可以买卖2次股票,IV是最多买卖K次。前一题我们定义dp数组时设置了5个状态,同理,这个题目设置2*K+1个状态。0状态代表没有任何操作的状态,奇数表示买入,偶数为卖出。递归公式和前一个题目一致。

2024-10-11 12:16:15 593

原创 leetcode 刷题day39动态规划Part08 买卖股票(121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III)

思路:这个题可以用贪心的方法来做,找到最左最小的值,取最右最大值,找到最大的利润。考虑动态规划动规五部曲分析如下:1、确定dp数组以及下标的含义dp[i][0] 表示第i天持有股票所得最多现金,一开始现金是0,那么加入第i天买入股票现金就是 -prices[i], 是一个负数。dp[i][1] 表示第i天不持有股票所得最多现金2、确定递推公式如果第i天持有股票即dp[i][0],那么可以由两个状态推出来。

2024-10-10 09:49:53 1514

原创 leetcode 刷题day38动态规划Part07 打家劫舍(198.打家劫舍、213.打家劫舍II、337.打家劫舍III)

打家劫舍的线性表、环、二叉树形态

2024-10-09 17:44:16 1105

原创 leetcode 刷题day37动态规划Part06背包问题( 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包)

思路:每种硬币的数量是无限的,是典型的完全背包问题。但是题目要求等于目标值的最小硬币个数。所以这里需要对动规五部曲进行分析。

2024-10-08 15:25:33 664

原创 leetcode 刷题day36动态规划Part05 背包问题(完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶))

完全背包的每件商品都有无限个,和01背包的一不同主要体现在遍历顺序上。为了保证每个物品仅被添加一次,01背包内嵌的循环是从大到小遍历。而完全背包的物品是可以添加多次的,所以要从小到大去遍历。

2024-10-07 21:56:33 606

原创 leetcode 刷题day35动态规划Part04 背包问题(1049. 最后一块石头的重量 II 、494. 目标和、474.一和零)

0-1背包应用的难点在于找到背包的容量,物体的重量和价值

2024-10-07 17:37:58 1205

原创 leetcode刷题day34|动态规划Part03 背包问题(01背包问题 二维、01背包问题 一维、416. 分割等和子集)

0-1背包问题基础与应用

2024-10-01 13:23:12 710

原创 leetcode刷题day33|动态规划Part02(62.不同路径、63. 不同路径 II、 343.整数拆分、96.不同的二叉搜索树)

机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。

2024-09-29 11:34:34 1355

原创 leetcode刷题day32|动态规划Part01(509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯)

动态规划(Dynamic Programming,简称DP),如果某一问题有很多重叠子问题,使用动态规划是最有效的。动态规划中每一个状态一定是由上一个状态推导出来的。

2024-09-28 17:01:13 853

原创 leetcode刷题day31|贪心算法Part05重叠区间问题(56. 合并区间、738.单调递增的数字、968.监控二叉树)

贪心最后一节啦,监控二叉树挺有意思的。

2024-09-27 11:19:17 871

原创 leetcode刷题day30|贪心算法Part04重叠区间问题(452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间)

今天的三道题目都是重叠区间的问题。

2024-09-26 10:20:35 741

原创 leetcode刷题day29|贪心算法Part03( 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列)

思路:暴力解法:for循环适合模拟从头到尾的遍历,while循环适合模拟环形遍历!但是会超出leetcode的时间限制。贪心算法:计算每个地点的剩余油量,如果剩余油量的累加和小于零,则说明0-i作为起点均不能绕环一周,从i+1开始,重新进行剩余油量的累加。如果剩余油量全部加起来小于0,说明不够一周,返回-1;否则一定存在index使得能够环绕一周。

2024-09-25 23:40:33 714

原创 leetcode刷题day28|贪心算法Part02(122.买卖股票的最佳时机II 、 55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和)

思路:局部最优,第二天卖出为正值。全局最优,所有正值相加。

2024-09-24 15:26:25 392

原创 leetcode刷题day27|贪心算法Part01(455.分发饼干、376. 摆动序列、53. 最大子序和)

贪心的本质选择每一阶段的局部最优,从而达到全局最优。

2024-09-23 19:26:58 823

原创 leetcode刷题day25|回溯算法Part04(491.递增子序列、46.全排列、47.全排列 II)

全排列树层树枝的去重有点难理解

2024-09-21 21:36:22 363

原创 leetcode刷题day24|回溯算法Part03(93.复原IP地址、78.子集、90.子集II)

回溯,巩固分割问题,练习集合问题,分割问题还是有难度的。

2024-09-20 20:56:31 1037

原创 leetcode刷题day23|回溯算法Part02(39. 组合总和 、40.组合总和II、131.分割回文串)

回溯的组合问题和分割问题,分割问题有点难理解,但本质上和组合一样。

2024-09-19 16:16:27 1183

原创 leetcode刷题day22|回溯算法Part01( 77. 组合 、216. 组合总和 III、17.电话号码的字母组合)

回溯是递归的副产品,只要有递归就会有回溯,回溯函数也就是递归函数。回溯是暴力穷举解法,效率并不高。但一些问题只能使用回溯来解决。

2024-09-18 23:32:07 1264

原创 leetcode刷题day20|二叉树Part08(669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树)

二叉树最后一部分啦,完结!

2024-09-16 21:25:17 361

原创 leetcode刷题day19|二叉树Part07(235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点)

二叉搜索树的增加和删除

2024-09-15 23:49:10 706

原创 leetcode刷题day18|二叉树Part06( 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先)

二叉搜索树、最近公共祖先

2024-09-14 21:29:37 586

原创 leetcode刷题day17|二叉树Part05(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树)

二叉搜索树

2024-09-13 17:56:25 613

原创 leetcode刷题day16|二叉树Part04(找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树)

如何确定递归的返回值,构造二叉树

2024-09-13 16:04:30 1171 1

原创 leetcode刷题day15|二叉树Part03(以递归方法为主:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、 222.完全二叉树的节点个数)

递归回溯,递归的一些应用

2024-09-12 21:47:40 448 1

原创 leetcode刷题day14|二叉树Part02(以递归方法为主:226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度)

二叉树遍历的应用

2024-09-11 22:24:21 874

空空如也

空空如也

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

TA关注的人

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