自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 完结撒花!!

万事开头难,还记得头一天,上面都不懂的我摸索着学写博客,努力理解题意和题解,记得第一天花了将近4h才完成。而后就是越来越熟练的思考,写题,理解题解,记忆。而我,居然坚持了那么久!这两个月我最大的收获就是,学会了用博客来帮助记忆知识,其次就是跟着卡哥系统学习的数据结构和算法知识!不管怎样,过程有苦有想放弃的时候,中途多次产生排斥懒惰心理,导致任务堆积到下一天。此时此刻,感慨万千,从9月初深思熟虑加入训练营后,不知不觉,我竟然跟着一路过关斩将,到十一月中,我终于结束了这长达67天的算法训练营。

2024-11-18 01:28:59 245

原创 DAY66||Floyd 算法精讲 |A * 算法精讲 (A star算法)|最短路算法总结篇|图论总结

四大最短路算法,分别是Dijkstra、Bellman_ford、SPFA 和 Floyd。大体使用场景的分析如果遇到单源且边为正数,直接Dijkstra。使用朴素版还是 堆优化版 还是取决于图的稠密度.如果遇到单源边可为负数,直接 Bellman-Ford,同样 SPFA 还是 Bellman-Ford 取决于图的稠密度。一般情况下,直接用 SPFA。如果有负权回路,优先 Bellman-Ford, 如果是有限节点最短路 也优先 Bellman-Ford,理由是写代码比较方便。

2024-11-18 01:19:09 1099

原创 DAY65||Bellman_ford 队列优化算法(又名SPFA)|bellman_ford之判断负权回路|bellman_ford之单源有限最短路

输出一个整数,表示从城市 src 到城市 dst 的最低运输成本,如果无法在给定经过城市数量限制下找到从 src 到 dst 的路径,则输出 "unreachable",表示不存在符合条件的运输方案。路径中存在负权回路,从 1 -> 2 -> 3 -> 1,总权值为 -1,理论上货物运输商可以在该回路无限循环赚取政府补贴,所以输出 "circle" 表示已经检测出了该种情况。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。

2024-11-15 23:55:51 1067

原创 DAY64||dijkstra(堆优化版)精讲 ||Bellman_ford 算法精讲

题目如上题。

2024-11-15 10:23:31 1055

原创 DAY63||拓扑排序精讲 |dijkstra(朴素版)精讲

某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依赖于文件 B,则必须在处理文件 A 之前处理文件 B (0 <= A, B <= N - 1)。请编写一个算法,用于确定文件处理的顺序。第一行输入两个正整数 N, M。表示 N 个文件之间拥有 M 条依赖关系。后续 M 行,每行两个正整数 S 和 T,表示 T 文件依赖于 S 文件。输出共一行,如果能处理成功,则输出文件顺序,用空格隔开。

2024-11-14 20:04:48 798

原创 Day62||prim算法精讲 |kruskal算法精讲

在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通起来(注意:这是一个无向图)。给定一张地图,其中包括了所有的岛屿,以及它们之间的距离。以最小化公路建设长度,确保可以链接到所有岛屿。第一行包含两个整数V 和 E,V代表顶点数,E代表边数。顶点编号是从1到V。例如:V=2,一个有两个顶点,分别是1和2。

2024-11-13 18:09:44 1018

原创 DAY60||108.冗余连接 |109.冗余连接II

题目说是无向图,返回一条可以删去的边,使得结果图是一个有着N个节点的树(即:只有一个根节点)。如图所示,节点A 和节点 B 不在同一个集合,那么就可以将两个 节点连在一起。如果边的两个节点已经出现在同一个集合里,说明着边的两个节点已经连在一起了,再加入这条边一定就出现环了。已经判断 节点A 和 节点B 在在同一个集合(同一个根),如果将 节点A 和 节点B 连在一起就一定会出现环。109.冗余连接Ⅱ大意:有一个有向图,是由一颗有向树 + 一条有向边组成的 ,现在让我们找到那条边 把这条边删了,

2024-11-13 00:44:23 1135

原创 DAY59||并查集理论基础 |寻找存在的路径

这里8的根是3,那么 5 应该指向 8 的根 3,这里的原因,我们在上面「常见误区」已经讲过了。不少录友在接触并查集模板之后,用起来很娴熟,因为模板确实相对固定,但是对并查集内部数据组织方式以及如何判断是否是同一个集合的原理很模糊。如果存在,输出 1;后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。返回值分别如下,表示,8 和 7 是同一个集合,而 7 和 2 不是同一个集合。第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。

2024-11-12 01:32:42 780

原创 DAY58||110.字符串接龙 |105.有向图的完全可达性 |106.岛屿的周长

字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列:1. 序列中第一个字符串是 beginStr。2. 序列中最后一个字符串是 endStr。3. 每次转换只能改变一个字符。4. 转换过程中的中间字符串必须是字典 strList 中的字符串,且strList里的每个字符串只用使用一次。给你两个字符串 beginStr 和 endStr 和一个字典 strList,找到从 beginStr 到 endStr 的最短转换序列中的字符串数目。

2024-11-11 00:19:13 677

原创 DAY57||101.孤岛的总面积 |102.沉没孤岛|103.水流问题|104.建造最大岛屿

这个过程的时间复杂度也为 n * n。所以整个解法的时间复杂度,为 n * n + n * n 也就是 n^2。

2024-11-08 18:59:19 1138

原创 DAY56 ||99.岛屿数量 深搜 |99.岛屿数量 广搜 |100.岛屿的最大面积

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0。输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。3。

2024-11-07 18:13:26 960

原创 DAY55 || 图论理论基础 |深搜理论基础 |98. 所有可达路径|广搜理论基础

二维坐标中,两点可以连成线,多个点连成的线就构成了图。当然图也可以就一个节点,甚至没有节点(空图)

2024-11-05 17:52:35 908

原创 DAY53|| 42. 接雨水|84.柱状图中最大的矩形

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。9。

2024-11-04 21:35:04 898

原创 DAY52 || 739. 每日温度| 496.下一个更大元素 I |503.下一个更大元素II

题目说如果不存在对应位置就输出 -1 ,所以result数组如果某位置没有被赋值,那么就应该是是-1,所以就初始化为-1。

2024-11-04 01:38:52 1229

原创 DAY51 || 647. 回文子串 |516.最长回文子序列 | 动态规划总结篇

不知不觉就已经做了快50道dp题目。

2024-11-03 09:48:54 635

原创 DAY50 || 115.不同的子序列 |583. 两个字符串的删除操作 | 72. 编辑距离 | 编辑距离总结篇

给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)题目数据保证答案符合 32 位带符号整数范围。

2024-11-02 11:10:06 1183

原创 DAY49 ||1143.最长公共子序列| 1035.不相交的线 | 53. 最大子序和 |392.判断子序列

给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。3最长公共子序列是 "ace" ,它的长度为 3。3最长公共子序列是 "abc" ,它的长度为 3。0两个字符串没有公共子序列,返回 0。

2024-10-31 16:24:35 1073

原创 DAY48|| 300.最长递增子序列 | 674. 最长连续递增序列 | 718. 最长重复子数组

给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列4最长递增子序列是 [2,3,7,101],因此长度为 4。41。初始值大小至少是1,且从前往后遍历。

2024-10-30 18:16:43 873

原创 DAY46 ||188.买卖股票的最佳时机IV |309.最佳买卖股票时机含冷冻期 |714.买卖股票的最佳时机含手续费

给你一个整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成k笔交易。也就是说,你最多可以买k次,卖k次。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。2在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。7。

2024-10-29 07:15:58 807

原创 DAY45 ||121. 买卖股票的最佳时机 |122.买卖股票的最佳时机II | 123.买卖股票的最佳时机III

给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。

2024-10-27 23:14:30 951

原创 DAY44 ||198.打家劫舍 | 213.打家劫舍II |337.打家劫舍III

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。

2024-10-26 01:18:15 1160

原创 DAY43 ||322.零钱兑换 |279.完全平方数 |139.单词拆分

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。

2024-10-24 17:47:05 1177

原创 DAY42 ||完全背包理论 | 518. 零钱兑换 II | 377. 组合总和 Ⅳ|70. 爬楼梯 (进阶)

什么是完全背包:有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。。不同于01背包,二者的区别就是遍历顺序。完全背包的物品背包的内外层循环顺序不影响求值。这里是背包从小到大遍历。以下是纯完全背包题目。

2024-10-23 23:53:57 1176

原创 DAY41 ||1049. 最后一块石头的重量 II |494. 目标和 |474.一和零

有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x

2024-10-23 14:32:03 890

原创 DAY39||背包理论基础 |416.分割等和子集

但是掌握 01背包和完全背包就可以了。

2024-10-21 09:59:23 1186

原创 DAY38 ||62.不同路径 |63. 不同路径 II

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

2024-10-19 20:10:01 936

原创 DAY37 || 理论基础|509. 斐波那契数 |70. 爬楼梯 |746. 使用最小花费爬楼梯

找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!做动规的题目,写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。题目:509. 斐波那契数 - 力扣(LeetCode)1.确定dp数组以及下标含义dp[i]的定义为:第i个数的斐波那契数值是dp[i]2.确定递推公式题目中已给3.dp数组如何初始化题目已给,初始化d[0]=0,d[1]=14.遍历顺序根据递推公式,应该是从前往后遍历5.举例推导dp数组0,1,2,3,5,8。。。。

2024-10-19 10:27:38 867

原创 DAY36||56.合并区间 | 738.单调递增的数字| 总结篇

以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。

2024-10-18 00:09:25 526

原创 DAY35||452.用最少数量的箭引爆气球 |435.无重叠区间 |763.划分字母区间

此时问题就是要求非交叉区间的最大个数。这里记录非交叉区间的个数还是有技巧的,如图:除了右排之外,区别就是这里用了。

2024-10-17 00:00:49 1063

原创 DAY34 ||134.加油站 |135.分发糖果|860.柠檬水找零|406.根据身高重建队列

排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]

2024-10-16 00:37:15 1098

原创 DAY32|| 122.买卖股票的最佳时机 |55.跳跃游戏 |45.跳跃游戏Ⅱ |1005.K次取反后最大化的数组和

局部最优推出全局最优,找不出反例,试试贪心!如图:覆盖范围的最右边界(数组下标,看是否能达到终点数组)等于数组下标加上数组内容(相当于跳跃步数)。。好巧妙的写法,但是我怎么想不到呢,只能理解例子怎么走的。。

2024-10-14 09:45:54 1361

原创 DAY31 ||贪心算法基础 | 455.分发饼干 |376.摆动序列 |53.最大子数组和

贪心算法是一种在求解问题时采取逐步构建解决方案的算法策略。它通过在每一步选择在当前看来最优的选择(即“贪心”选择),希望通过局部最优解的累积得到全局最优解。

2024-10-13 15:55:30 1318

原创 DAY30||491.非递减子序列 |46.全排列 |47.全排列Ⅱ

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。去重逻辑是1.本层重复元素不使用,纵向的树枝可以使用重复元素,但和path末尾相比要去掉非递增的元素。(这些在逻辑里去重,终止条件只要取所有节点即可)本题可以用set去重,(只记录本层重复使用的元素)。x写个上题(使用used去重)不一样的写法先。。优化可以用数组做哈希表。

2024-10-12 08:54:05 873

原创 DAY29|| 93.复原ip地址 |78.子集 |90.子集Ⅱ

正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s,用以表示一个 IP 地址,返回所有可能的,这些地址可以通过在s中插入'.'来形成。你重新排序或删除s中的任何数字。你可以按顺序返回答案。本题和切割回文串那里代码大致相同,不同在于,本题改动,终止判断条件那里还需要再比较一次合法,前三段直接在单层搜索里就判断了。还要注意判断是否合法的三种不合法情况。其余和回溯模板差不多。树形结构。

2024-10-10 21:27:04 1093

原创 DAY28||39.组合总数 |40.组合总和Ⅱ |131.分割回文串

给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。[2,3,6,7], target =72 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。

2024-10-10 00:34:23 1009

原创 DAY27||回溯算法基础 | 77.组合| 216.组合总和Ⅲ | 17.电话号码的字母组合

一种效率不高的暴力搜索法。本质是穷举。有些问题能穷举出来就不错了。回溯算法解决的问题有:在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。如图:回溯算法模板77.组合 题目:77. 组合 - 力扣(LeetCode)递归里有for循环。抽象成树形结构 然后就是经典的回溯三部曲·递归函数的参数和返回值·回溯终止条件·单层递归逻辑(单层搜索过程)这个和找二叉树路径总和那题还挺像的。题目:216. 组合总和 III - 力扣(LeetCode)图思

2024-10-09 00:29:34 1086

原创 DAY26||669.修建二叉树 |108.将有序数组转换为二叉搜索树|538.把二叉搜索树转换为累加树

给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在中。修剪树改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。[1,null,2]

2024-10-07 21:00:50 987

原创 DAY20||235.二叉搜索树的最近公共祖先 |701.二叉搜索树的插入操作|450删除二叉搜索树的节点

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]因为是有序树,所以 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。

2024-10-04 01:25:23 816

原创 DAY18||530.二叉搜索树的最小绝对值差 |501.二叉搜索树中的众数| 236.二叉树的最近公共祖先

给你一个二叉搜索树的根节点root,返回。差值是一个正数,其数值等于两值之差的绝对值。1。

2024-09-30 19:57:12 798

原创 DAY17||654.最大二叉树 |617.合并二叉树 |700.二叉搜索树中的搜索 |

给定一个不含重复元素的整数数组。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :构造二叉树一定要,因为要先找到中,才能分割左右子树。本题图解思路:本题做过上一题构建数组确实变得容易很多。代码优化方向有,不用每次找左右子树的时候构建新的数组的话效率就会高很多。(即直接用下标索引直接在原数组上操作)关于加不加if的问题,如果允许空节点进入递归,就不加。

2024-09-29 01:40:35 1474

空空如也

空空如也

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

TA关注的人

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