自定义博客皮肤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)
  • 收藏
  • 关注

原创 代码随想录算法训练营总结

还有一部分是背包问题,背包问题也很复杂,0-1背包,完全背包,多重背包等初刷时候印象不深得再刷几次,要注意不同背包的遍历方式,dp公式等。:这部分应该是本次最难的部分了,题目多且杂,涉及的方法很多,尤其是最后最短路径几乎是一题一个算法,先掌握到并查集部分,并查集很好用,也不难理解,并查集代码最难的地方是是find函数,看明白就能写出来。现分章节做一个整体总结。:树的遍历,优先掌握递归遍历,迭代遍历多刷后再掌握,这部分题目题型和相像,在遍历基础上的变形很多,在遍历阶段思考应该哪种遍历,用什么存储遍历的数据。

2024-11-19 13:36:54 490

原创 代码随想录算法训练营第六十五天|Bellman_ford 队列优化算法,bellman_ford之判断负权回路,bellman_ford之单源有限最短路

输出一个整数,表示从城市 src 到城市 dst 的最低运输成本,如果无法在给定经过城市数量限制下找到从 src 到 dst 的路径,则输出 “unreachable”,表示不存在符合条件的运输方案。某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。

2024-11-17 23:21:52 743

原创 代码随想录算法训练营第六十六天| Floyd 算法精讲,A * 算法精讲 (A star算法)

接下来的 n 行,每行包含四个整数 a1, a2, b1, b2,分别表示骑士的起始位置 (a1, a2) 和目标位置 (b1, b2)。小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力,走最短的路径。接下来的 M 行,每行包含三个整数 u, v, w,表示景点 u 和景点 v 之间有一条长度为 w 的双向道路。接下来的 Q 行,每行包含两个整数 start, end,表示一个观景计划的起点和终点。接下里的一行包含一个整数 Q,表示观景计划的数量。

2024-11-17 23:18:19 443

原创 代码随想录算法训练营第六十四天|dijkstra(堆优化版)精讲, Bellman_ford 算法精讲

共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。然而,途中的各个车站之间的道路状况、交通拥堵程度以及可能的自然因素(如天气变化)等不同,这些因素都会影响每条路径的通行时间。接下来为 M 行,每行包括三个整数,S、E 和 V,代表了从 S 车站可以单向直达 E 车站,并且需要花费 V 单位的时间。接下来为 m 行,每行包括三个整数,s、t 和 v,表示 s 号城市运输货物到达 t 号城市,道路权值为 v(单向图)。

2024-11-17 23:06:51 388

原创 代码随想录算法训练营第六十三天|拓扑排序、dijkstra(朴素版)

某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依赖于文件 B,则必须在处理文件 A 之前处理文件 B (0 <= A, B <= N - 1)。然而,途中的各个车站之间的道路状况、交通拥堵程度以及可能的自然因素(如天气变化)等不同,这些因素都会影响每条路径的通行时间。接下来为 M 行,每行包括三个整数,S、E 和 V,代表了从 S 车站可以单向直达 E 车站,并且需要花费 V 单位的时间。

2024-11-15 15:53:55 281

原创 代码随想录算法训练营第六十二天最小生成树prim|kruskal

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

2024-11-15 15:49:38 267

原创 代码随想录算法训练营第六十天|108. 冗余连接,109. 冗余连接II

该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。输入一个有向图,该图由一个有着 n 个节点(节点编号 从 1 到 n),n 条边,请返回一条可以删除的边,使得删除该条边之后该有向图可以被当作一颗有向树。现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图,如图。后续 N 行,每行输入两个整数 s 和 t,代表这是 s 节点连接并指向 t 节点的单向边。输出一条可以删除的边,若有多条边可以删除,请输出标准输入中最后出现的一条边。输出一条可以删除的边。

2024-11-11 15:55:13 347

原创 代码随想录算法训练营第五十九天|107. 寻找存在的路径(并查集)

输出一个整数,代表是否存在从节点 source 到节点 destination 的路径。你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。最后一行包含两个正整数,代表起始节点 source 和目标节点 destination。后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。

2024-11-11 14:49:46 222

原创 代码随想录算法训练营第五十八天|110. 字符串接龙,105.有向图的完全可达性,106. 岛屿的周长

给你两个字符串 beginStr 和 endStr 和一个字典 strList,找到从 beginStr 到 endStr 的最短转换序列中的字符串数目。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。在矩阵中恰好拥有一个岛屿,假设组成岛屿的陆地边长都为 1,请计算岛屿的周长。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。

2024-11-11 14:45:58 750

原创 代码随想录算法训练营第五十七天|101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿

给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。再遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起,遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。

2024-11-08 16:28:06 861

原创 代码随想录算法训练营第五十五天|图论理论基础

给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所有从节点 1 到节点 n 的路径。注意输出的序列中,最后一个节点后面没有空格!例如正确的答案是 1 3 5,而不是 1 3 5, 5后面没有空格!输出所有的可达路径,路径中所有节点的后面跟一个空格,每条路径独占一行,存在多条路径,路径输出的顺序可任意。后续 M 行,每行包含两个整数 s 和 t,表示图中的 s 节点与 t 节点中有一条路径。第一行包含两个整数 N,M,表示图中拥有 N 个节点,M 条边。

2024-11-07 15:34:18 354

原创 代码随想录算法训练营第五十六天|99.岛屿数量,100. 岛屿的最大面积

给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。后续 N 行,每行包含 M 个数字,数字为 1 或者 0。

2024-11-07 15:28:25 362

原创 代码随想录算法训练营第五十三天|42. 接雨水,84. 柱状图中最大的矩形

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入数组首尾各补上一个0(与42.接雨水不同的是,本题原首尾的两个柱子可以作为核心柱进行最大面积尝试,参考。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。单调栈理解较为抽象,精简后的代码理解起来较为困难,以精简前代码理解为主。求在该柱状图中,能够勾勒出来的矩形的最大面积。:最大的矩形为图中红色区域,面积为 10。

2024-11-07 09:32:38 345

原创 代码随想录算法训练营第五十二天|739. 每日温度,739. 每日温度,503. 下一个更大元素 II

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素。给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。数字 2 找不到下一个更大的数;

2024-11-07 09:28:34 498

原创 代码随想录算法训练营第五十一天|647. 回文子串,516. 最长回文子序列

和上题类似,区别在于子序列可不连续,在判断回文子串的题目中,如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2,如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,分别加入取最大值,dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);布尔类型的dp[i][j],表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

2024-10-31 14:13:14 514

原创 代码随想录算法训练营第五十天|115. 不同的子序列,583. 两个字符串的删除操作,72. 编辑距离

当s[i - 1] 与 t[j - 1]不相等时,dp[i][j]只有一部分组成,不用s[i - 1]来匹配(就是模拟在s中删除这个元素),即:dp[i - 1][j]例如: s:bagg 和 t:bag ,s[3] 和 t[2]是相同的,但是字符串s也可以不用s[3]来匹配,即用s[0]s[1]s[2]组成的bag。所以当s[i - 1] 与 t[j - 1]相等时,dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];rorse -> rose (删除 ‘r’)

2024-10-31 13:45:00 833

原创 代码随想录算法训练营第四十九天|1143. 最长公共子序列,1035. 不相交的线,53. 最大子数组和,392. 判断子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。

2024-10-31 13:43:05 926

原创 代码随想录算法训练营第四十八天|300. 最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …为结尾的字符串 ),dp[i][j]的定义也就决定着,在遍历dp[i][j]的时候i 和 j都要从1开始。定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,需要单独处理初始化部分。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的。为结尾的A” 标明一定是 以。

2024-10-31 13:40:56 654

原创 代码随想录算法训练营第四十六天|188. 买卖股票的最佳时机 IV, 309. 买卖股票的最佳时机含冷冻期,714. 买卖股票的最佳时机含手续费

*解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

2024-10-31 13:38:25 953

原创 代码随想录算法训练营第四十四天|198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。小偷又发现了一个新的可行窃的地区。

2024-10-25 15:42:12 558

原创 代码随想录算法训练营第四十三天|322. 零钱兑换, 279. 完全平方数,139. 单词拆分

完全平方数 是一个整数,其值等于另一个整数的平方;: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。和上题类似完全背包问题,需要注意n=1时候,完全平方数可以取1,所以完全平方数筛选时候要至少覆盖。参考代码,初始值赋inf,可以减少分类情况,只考虑是否是初始值状态来进行状态转移。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。顺序有影响,所以要先遍历背包。

2024-10-25 15:40:24 1007

原创 代码随想录算法训练营第四十二天|完全背包, 518. 零钱兑换 II,377. 组合总和 Ⅳ,57. 爬楼梯

第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target。给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。有顺序要求时,内外层有要求,外层是背包数,内层是物品。请注意,顺序不同的序列被视作不同的组合。假设每一种面额的硬币有无限个。

2024-10-25 15:37:58 373

原创 代码随想录算法训练营第四十五天|121. 买卖股票的最佳时机,122. 买卖股票的最佳时机 II,123. 买卖股票的最佳时机 III

第i天卖出股票,所得现金就是按照今天股票价格卖出后所得现金即:prices[i] + dp[i - 1][0],同样dp[i][1]取最大的,dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);第i天买入股票,所得现金就是买入今天的股票后所得现金即:-prices[i],那么dp[i][0]应该选所得现金最大的,所以dp[i][0] = max(dp[i - 1][0], -prices[i]);在每一天,你可以决定是否购买和/或出售股票。

2024-10-25 15:34:11 994

原创 代码随想录算法训练营第四十一天|1049. 最后一块石头的重量 II,494. 目标和,474. 一和零

1049. 最后一块石头的重量 II494. 目标和474. 一和零有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。

2024-10-23 00:01:37 646

原创 代码随想录算法训练营第三十九天|背包问题,416. 分割等和子集

一维dp 的01背包初始化和遍历顺序更简单,一维dp数组的背包在遍历顺序上和二维不同,使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历。第i件物品的重量是weight[i],得到的价值是value[i]。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200。: 数组可以分割成 [1, 5, 5] 和 [11].: 数组不能分割成两个元素和相等的子集.

2024-10-21 21:47:48 313

原创 代码随想录算法训练营第三十八天|62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树

返回满足题意的二叉搜索树的种数。给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。贪心算法每次拆成n个3,如果剩下是4,则保留4,然后相乘,需要数学证明,暂时不用掌握。和上题一样,增加一个障碍物判断,遇到障碍物时候,无法到达目标所以该位置dp值是0。转化为,m + n - 2个不同的数,随便取m - 1个数,有几种取法。,路径数为二者之和,代码增加对边界的判断就行。

2024-10-18 16:09:42 780

原创 代码随想录算法训练营第三十七天|509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。F(n) = F(n - 1) + F(n - 2),其中 n > 1。每次你可以爬 1 或 2 个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。都是斐波那契数的变形,简单题目,先对dp有一个认知。给定 n ,请计算 F(n)。:你将从下标为 1 的台阶开始。:你将从下标为 0 的台阶开始。:有三种方法可以爬到楼顶。

2024-10-17 10:38:20 384

原创 代码随想录算法训练营第三十六天|56. 合并区间,738. 单调递增的数字,968. 监控二叉树

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。从头遍历,遇到当前位置数字小于前一位数字时候,前一位数字减一,从当前位置到最后数字都改为9,然后从头遍历,直到满足全递增。当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增。

2024-10-16 14:35:29 469

原创 代码随想录算法训练营第三十五天|452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。只需更新重叠区间,如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。例如 [1, 2] 和 [2, 3] 是不重叠的。在x = 2处发射箭,击破气球[1,2]和[2,3]。

2024-10-16 14:15:45 909

原创 代码随想录算法训练营第三十四天|134. 加油站,135. 分发糖果,860. 柠檬水找零,406. 根据身高重建队列

每个加油站的剩余量rest[i]为gas[i] - cost[i]。i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

2024-10-16 14:14:24 905

原创 代码随想录算法训练营第三十二天|122. 买卖股票的最佳时机 II,55. 跳跃游戏,45. 跳跃游戏 II,1005. K 次取反后最大化的数组和

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。从后往前遍历,如果能从下标0跳到下标n-1位置,n-2下标能跳到n-1位置,也能从下标 0跳到下标n-2位置,问题就改为从下标0能否跳到下标n-2位置,若n-2下标不能跳到n-1位置,n-3下标能跳到n-1位置,问题就改为从下标0能否跳到下标n-3位置,以此类推。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

2024-10-12 14:48:25 554

原创 代码随想录算法训练营第三十天|455. 分发饼干,376. 摆动序列,53. 最大子数组和

在计算是否有峰值的时候,遍历下标 i ,计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果prediff < 0 && curdiff > 0 或者 prediff > 0 && curdiff < 0 此时就有波动就需要统计。大饼干优先:局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩,从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。子数组是数组中的一个连续部分。

2024-10-12 10:24:22 575

原创 代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:输入:nums = [4,4,3,2,1]输出:[[4,4]]注意这道题数组不能排序,会破坏数组结构。有重复元素

2024-10-11 21:53:01 1030

原创 代码随想录算法训练营第二十九天| 93. 复原 IP 地址,78. 子集, 90. 子集 II

输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]涉及重复元素问题,在回溯前先排序,利用递归的时候下一个startIndex是i+1而不是0去重,对同一树层使用过的元素进行跳过。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。给你一个整数数组 nums ,数组中的元素 互不相同。,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在。解集不能包含重复的子集。

2024-10-10 23:08:32 788

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

中可以使数字和为目标数$ target$ 的 所有 不同组合 ,并以列表形式返回。给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。有模板后就简单了,可使用多次,无非是回溯时候从当前位置开始。中所有可以使数字和为$ target$ 的组合。中的每个数字在每个组合中只能使用 一次。7 也是一个候选, 7 = 7。

2024-10-10 23:05:24 921

原创 代码随想录算法训练营第二十七天| 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。输出**:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。**输入: k = 4, n = 1。上面题目模板简单修改就行。没有其他符合的组合了。没有其他符合的组合了。: 不存在有效的组合。

2024-10-07 23:05:25 517

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

将二叉树转换有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],就是对应题目要求的,因为是二叉搜索树,从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了。输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输入:root = [3,2,4,1]输出:[3,3,2]

2024-10-07 18:09:49 527

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

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

2024-10-01 19:47:08 1132

原创 代码随想录算法训练营第十八天|530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数, 236. 二叉树的最近公共祖先

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。这道题目是二叉搜索树,中序遍历就是有序的,遍历有序数组的元素出现频率,从头遍历,那么一定是相邻两个元素作比较,然后就把出现频率最高的元素输出就可以了。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即出现频率最高的元素)。:节点 5 和节点 4 的最近公共祖先是节点 5。

2024-09-28 23:52:25 365

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

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。这道题目有个陷阱,不能单纯的比较左节点小于中间节点,右节点大于中间节点,要比较的是左子树所有节点小于中间节点,右子树所有节点大于中间节点。上面两个代码中,递归超时了,该树已经是二叉搜索树了,所以利用二分性质切分,参考答案。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。:根节点的值是 5 ,但是右子节点的值是 4。只考虑根节点值情况,直接遍历就行。

2024-09-28 22:23:41 771

空空如也

空空如也

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

TA关注的人

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