- 博客(58)
- 收藏
- 关注
原创 代码随想录第六十二天
之后把每个点到自己的距离设为0,然后开始核心的Floyd算法:逐个考虑每个可能的中转点k,对于任意两点i和j,判断是直接从i到j的距离更短,还是经过中转点k(即从i到k再从k到j)的总距离更短,选择较短的那个更新距离。三维数组的第三维k表示当前允许经过的节点编号范围是1到k,这样不仅记录了最终的最短路径,还保存了所有的中间状态。算法的做法是每次都选择最有希望的位置继续探索,这个"最有希望"是通过两个值来衡量的:一个是已经走的步数乘以5(称为g值),另一个是当前位置到终点的直线距离的平方(称为h值)。
2024-12-16 11:45:28
1273
原创 代码随想录第六十天
Bellman_ford 队列优化算法(又名SPFA)1.SPFA算法的主要特点和优化:队列优化:使用队列维护待更新的节点,只有当一个节点的距离被更新时,才会将其加入队列比Bellman-Ford更高效:不需要遍历所有边V-1次平均情况下时间复杂度为O(kE),其中k为每个点平均入队次数最坏情况仍为O(VE)负环检测:通过记录节点入队次数来检测负环,如果某个节点入队次数超过顶点数,说明存在负环我们依然使用minDist数组来表达 起点到各个节点的最短距离例题:94.城市间货物运输
2024-12-15 10:42:53
1285
原创 代码随想录第五十九天
这道题我们要注意,虽然也是求最短路径,但是权重有负值了,所以我们要注意不能使用前面的算法,这里我们换了一个算法,我们使用结构体数组存储图中的每条边的信息(起点、终点和权值)。核心算法是进行n-1轮松弛操作:每一轮都遍历所有的边,对于每条从from到to权值为val的边,如果经过from能得到一条到to的更短路径(即mindist[from] + val < mindist[to]),就更新到达to的距离。最后,如果终点的距离仍然是无穷大,说明无法到达,输出"unconnected",否则输出最短距离。
2024-12-13 09:50:38
1179
原创 代码随想录第五十八天
拓扑排序是对有向无环图(DAG)中所有顶点进行排序,使得图中任何一对顶点(u, v),如果存在一条从u到v的路径,那么在排序中u一定出现在v之前。dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。
2024-12-12 11:42:22
1247
原创 代码随想录第五十七天
不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通起来(注意:这是一个无向图)。不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通起来(注意:这是一个无向图)。顶点编号是从1到V。接下来共有 E 行,每行三个整数 v1,v2 和 val,v1 和 v2 为边的起点和终点,val代表边的权值。接下来共有 E 行,每行三个整数 v1,v2 和 val,v1 和 v2 为边的起点和终点,val代表边的权值。
2024-12-11 17:48:54
972
原创 代码随想录第五十六天
如果有入度为2的点,就考虑删除指向它的边;这道题是一个很明显的并查集,我们只需要像之前那样做好并查集的基础结构,然后我们开始放入元素,首先我们查看它是否有同一个父点,如果是同一个父点的话,说明这两个连接起来就是多余的一条边,否则我们就把两个边连接起来,最后打印答案就可以得到答案。输入一个有向图,该图由一个有着 n 个节点(节点编号 从 1 到 n),n 条边,请返回一条可以删除的边,使得删除该条边之后该有向图可以被当作一颗有向树。输出一条可以删除的边,若有多条边可以删除,请输出标准输入中最后出现的一条边。
2024-12-10 09:35:03
773
原创 代码随想录第五十五天
输出一个整数,代表是否存在从节点 source 到节点 destination 的路径。你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。最后一行包含两个正整数,代表起始节点 source 和目标节点 destination。后续 M 行,每行两个正整数 s 和 t,代表从节点 s 与节点 t 之间有一条边。给定一个包含 n 个节点的无向图中,节点编号从 1 到 n (含 1 和 n )。第一行包含两个正整数 N 和 M,N 代表节点的个数,M 代表边的个数。
2024-12-09 11:49:55
821
原创 代码随想录第五十三天
DFS的过程是:访问当前顶点,将其标记为已访问,然后递归访问该顶点的所有未访问过的相邻顶点。遍历完成后,检查所有顶点的visited标记,如果存在未被访问的顶点,说明图不连通,输出-1;如果所有顶点都被访问过,说明图是连通的,输出1。这道题就是需要找到1的位置时查看1的周围的情况,所以当我们找到1时,我们还需要用dir数组来对其进行移位查看周围的环境是否为0或者超出范围,如果是就加上1,如果不是就不加上1。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。
2024-12-07 20:39:11
1099
原创 代码随想录第五十二天
当我们找到一个未访问过的陆地时,说明我们遇到了一个新的岛屿,于是从这个陆地开始进行 DFS 或 BFS,遍历该岛屿的所有陆地单元并计算岛屿的面积。接着,我们遍历每个水单元格(值为 0),对于每个水单元格,我们需要检查它周围四个方向是否有相邻的岛屿,如果有相邻岛屿,我们就将这些岛屿的面积加起来,得到将当前水单元格变为陆地后可能得到的岛屿面积。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。岛屿面积的计算方式为组成岛屿的陆地的总数。
2024-12-06 12:16:23
922
原创 代码随想录第五十一天
这样,队列会不断扩展,直到岛屿中的所有陆地都被访问过。每当我们找到一个未被访问的陆地时,说明我们发现了一个新岛屿,因此开始新的 BFS 遍历,直到所有的岛屿都被标记完。每次 BFS 结束后,更新最大岛屿面积,最终遍历完所有的点,程序将输出最大的岛屿面积。每当处理完一个岛屿后,我们会清除已访问的标记,继续处理下一个未访问的陆地,直到所有的点都被遍历过为止。BFS 算法通过队列来逐层遍历岛屿,队列中的元素是一个个位置,每次我们从队列中弹出一个位置,并检查其四个方向的相邻位置(上下左右),若相邻位置是。
2024-12-05 21:21:01
1345
原创 代码随想录第四十九天
首先,在数组的两端加入虚拟的高度为 0 的柱子,确保栈中所有的柱子最终都能被处理。当遍历到一个比栈顶柱子矮的柱子时,就会弹出栈顶元素并计算以该元素为高度的矩形面积,矩形的宽度由栈中下一个元素的索引与当前柱子的位置之差决定。我们要接雨水,那么第一列和最后一列不能接,而我们左边部分从0开始进行遍历,看左边的最大部分是多少,右边从heightSize-1开始遍历,然后看右边部分最大是多少,然后开始一列一列遍历,接雨水看的是左右两部分最大值中的最小值来依次与柱子相减,最后把高度依次加起来就能得到答案。
2024-12-03 10:15:01
775
原创 代码随想录第四十八天
单调栈是一种基于栈的数据结构,常用于解决一些需要单调性(递增或递减)的问题。它的核心思想是栈中的元素按照特定顺序排列,通常是递增或递减,以便在处理问题时能够快速找到相关的答案。核心概念:单调递增栈:栈中的元素从底到顶是递增的。单调递减栈:栈中的元素从底到顶是递减的。通过保持栈的单调性,我们可以在遍历数组时快速找到某个元素的“下一个更大值”或“下一个更小值”等问题的解。工作原理:栈的初始化:空栈或初始化栈顶元素。遍历数组:逐个遍历数组的元素,对于每个元素,使用栈来保持单调性。
2024-12-02 10:28:13
1104
原创 代码随想录第四十六天
然后我们开始进行判断当处于两头的字符相同时,有两种情况,一种情况是长度小于等于3,可以直接推出是回文子串,另一种情况是它们长度大于3,我们就要依次对这个字符串里面的字符进行检测,也就是检测。的最长子序列的长度,然后我们后面步骤跟上面差不多,只不过判断条件变了,如果满足是回文子序列,那么就是前一个范围的长度加上2,不是的话就查看最长长度是哪一个,最后返回答案即可。动态规划的确有点难,他没有固定题型,所以我们只能去总结题目大体的做法,而真正重要的是我们要明白。,找出其中最长的回文子序列,并返回该序列的长度。
2024-11-30 17:43:42
545
原创 代码随想录第四十五天
个元素时需要删除操作需要几步,同样也分为相等和不等两种情况,但是这道题的初始化要注意,当。就为前一个个数加上如果前一个数没匹配上的个数,如果不满足就只是没匹配上的个数,最后返回。这两种情况下,相当于有一个空字符串,所以我们需要初始化它们,最后返回。今天的难度还算适中,整体并不难,但是有些题目你不看解析想不到。这道题跟上面差不多,都是对两个字符串进行操作,这道题中的。出现的个数,结果需要对 10^9 + 7 取模。前j个元素相匹配的个数,然后我们还要对。,最后进行遍历,当满足。的情况进行判断,如果。
2024-11-29 10:25:23
757
原创 代码随想录第四十四天
这道题跟最长重复子序列有点相像,但是它跟最长重复子序列不同的是,它不需要连续,它可以隔一个再算下一个,所以我们不仅要判断连续的情况还需要判断不同的情况,相同时我们要在前一个上加上1,不同时我们要找出最大值来使其子序列最长,最终返回答案即可。这道题跟上面的题目一样,只不过换了一种说法,相等且不能相交就是上面的求最大公共子序列,后面的做法跟上面的一样,很轻松求出答案。的子序列,所以我们要进行判断,这里我设置了一个用来索引的变量,和一个用来判断是否是子集的变量,这个索引的变量是用来防止。是数组中的一个连续部分。
2024-11-28 19:27:38
458
原创 代码随想录第四十三天
为结尾的最长递增子序列的长度,初始时每个元素的值都为 1,因为每个元素至少可以形成一个长度为 1 的递增子序列。接着,使用两层循环,外层遍历数组中的每个元素,内层遍历当前元素之前的所有元素,判断是否可以形成递增子序列(即前一个元素小于当前元素)。相同的数组递增次数,然后直接对每一个数组进行判断它们的元素是否相同,如果相同那么我们进行递增,如果不同我们就继续遍历,最后对这个数组进行最大值判断,找出最大值就行了。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。,并返回该序列的长度。
2024-11-28 12:17:49
779
原创 代码随想录第四十二天
这道题是这三道题中最简单的,我们把要分成两种情况,一种是买入股票,一种是卖出股票,所有dp需要分成两类,然后我们一个一个进行比较大小算出最大的值,然后返回最大值即可得解。初始化时,将第0天的买入状态设为负的股票价格(表示买入操作),然后通过状态转移更新每一天的买卖操作,最终返回。状态转移依赖于前一天的状态,考虑每一天的买入、卖出或者不操作,更新对应的最大利润。**注意:**这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。中的最大值,代表在所有可能的操作下的最大利润。
2024-11-26 09:13:28
585
原创 代码随想录第四十一天
对于每个状态,我们要么保持之前的状态不变,要么执行一次买入或卖出操作,从而根据当天的股价调整利润。代码的初始条件是第一天的状态,其中只有可能的初始状态是未进行交易和第一次买入后的状态,因此相应地初始化为0和负的股价值。所有我第二个方法用的是先找最小值,在找最小值的同时,用数组的每一个元素去减他,看能不能得到最大值,得到的值也就是算出来的最大值。这是一个动态规划题,我们首先设置了一个用来算最大值的变量,然后用一个循环来对整个数组进行遍历,遍历完后寻找下一个数组比前一个数组大的,然后进行相减最后得到答案。
2024-11-25 19:54:25
650
原创 代码随想录第三十九天
若不抢当前节点,则收益等于左右子节点“抢”与“不抢”两种收益中的最大值之和,最终在主函数中从根节点的“抢”和“不抢”两种状态中选择收益的最大值作为结果返回。这道题也是一个很明显的动态规划题目,但是根据题目的要求连续相邻的两个房子不能一起偷,我们需要找到如何偷的价值最大,所以我们设置dp[i]为前i个房子所偷的最大价值,然后我们要注意是前一个房子被偷了还是前一个房子的前一个被偷了,注意到这一点也就可以求出答案了。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。,今晚能够偷窃到的最高金额。
2024-11-23 18:48:24
513
原创 代码随想录第三十八天
现在有 N 种不同类型的矿石,每种矿石有一个重量 w[i],一个价值 v[i],以及最多 k[i] 个可用。这里是一个多重背包问题,也就是一个01背包问题,这里要从大到小进行排序,但是这里要注意,我们需要使用一个三重循环,因为它的个数和价值都是由我们自己决定,所以需要在加上一重循环,满足次数没有超过规定次数,同时没有超出背包容量,最后也就得到答案了。今天的题目都还好,我觉得动态规划也需要做一些题目来培养相应的题感,但是还是需要深入思考,这只是第一次接触,还需要对其进行相应的练习。,表示不同面额的硬币;
2024-11-22 19:20:26
992
原创 代码随想录第三十七天
然后,外层循环遍历所有可能的金额 j,内层循环遍历 nums 中的每个数字,判断是否能通过当前数字凑成金额 j,若能,则更新 dp[j]为 dp[j] += dp[j - nums[i]],表示通过选择 nums[i]后,增加了凑成 j 的组合数。因为次数不限,所以这是一道完全背包问题,这里的dp[i]为前i个数的组合次数为多少,因为可以重复取值,对于每一个硬币,我们从最小的背包容量开始计算,确保每个硬币都能被重复使用。第一行包含两个整数,n,v,分别表示研究材料的种类和行李所能承担的总重量。
2024-11-21 20:01:29
936
原创 代码随想录第三十六天
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回0。
2024-11-20 19:11:30
742
原创 代码随想录第三十五天
为前i+1个物品的最大价值数,设置时我们要注意进行初始化,所以我们去weight[0]为基准,大于weight[0]的我们赋值value[0]小于的我们赋值0,然后我们进行判断,如果没有装满,我们就一直往下装,如果装满了,我们就进行判断是换成下一个的价值大,还是自身的价值大,最后我们返回答案,就可以求解。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。输出一个整数,代表小明能够携带的研究材料的最大价值。
2024-11-19 19:19:14
566
原创 代码随想录第三十四天
第一种方法把整个看成一个二叉树,然后我们把能够满足条件的方法看成叶子节点,当我们能到达叶子节点时我们就说有一种方法能够满足,然后加起来就行了,因为用了递归,所以超时了。后面我们用递归的方法,把第一行和第一列的方法设置为一种,然后我们只能向下移动或者向右移动,所以我们得到。这道题跟上一道题目很像,但是这道题多了一些条件,我们要注意哪些地方有障碍,如果有障碍,那么我们就不能走这条路。今天的题目都还有一定的难度,但是对于动态规划越来越有认识了,动态规划最重要的是写出dp[i]的含义和方程的实现,还需要多多练习。
2024-11-18 10:42:12
650
原创 代码随想录第三十二天
动态规划(Dynamic Programming,简称DP)是一种通过将复杂问题分解为更小的子问题来求解的方法。它特别适用于存在重叠子问题和最优子结构性质的问题。动态规划通常用于优化问题,如最短路径、最大利润、最长子序列等。
2024-11-16 19:48:01
753
原创 代码随想录第三十一天
我们先把整个数组进行排序,把它按照从小到大的排序顺序排序,然后我们用第一个数组的第二位元素作为最开始的终止区间,让它去与后面数组的第一位元素进行对比,如果终止区间比第一位元素大,那么代表可以合并,我们把终止区间更新。这道题我把这个整数数字转换为字符串类型,然后从右到左进行检测,如果前一位比后一位大那么就返回插入一个变量来记录位置,并且前一位减少一位,当最后返回出来结果后,看插入点位置,把插入点后面的所有字符变为9,最终变成整数返回。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
2024-11-15 10:45:26
525
原创 代码随想录第三十天
这个就需要存储相应的元素位置,因为是二十六个字母,创建一个数组,用来存放它们的最终位置,然后我们开始划分字符串,我们先找字符串的最终位置最远的,在找的过程中如果我们发现最终位置与所找的最远位置相等时,也就是说当这个到达最大距离时的最后一个字符刚好是这个字符,这是一个划分字符串的位置,然后把这个位置放进数组中,最后返回最终答案就行了。今天的题目最后一道题需要思考,前两道题都还是比较好做的,但是贪心的思想总感觉有时候想不到,也许多做点题目会有些感觉。处射出一支箭,若有一个气球的直径的开始和结束坐标为。
2024-11-14 19:20:19
729
原创 代码随想录第二十九天
这道题就很简单了,我们只需要把5元的总和设置为一个变量,把10元的设置为一个变量,如果没有5元了,那么后面出现10元,20元直接false,如果有的话,对于10元来说,直接让5元的总和减去5,对于20元来说,直接让5元的总和减去5,让10元的总和减去10,最终返回是否为true或false就行了。今天的题目除了第三道都有点难,我还需要多进行思考,以及对于题目的整体总结和构建完整的做题体系,总的来说,还需要多多努力。再进行修正,确保这些评分较高的学生不会因为左侧的学生而得到不够的糖果,然后算出正确答案。
2024-11-13 18:54:59
830
原创 代码随想录第二十八天
首先我们要对于数组的长度进行判断,同时,我们要设置几个变量,分别用来表示目前的位置,最大的距离,以及跳跃数,我们先找出最大的距离,然后进行判断并且把当前位置进行替换为最大的距离,当到达目前位置后再进行上一次操作,当最远距离大于等于数组长度后最后返回出最终答案。我们每次只需要找到最小的值,然后把最小的值进行取反,最终加上的值一定是最大的,所以我们找到最小值,然后取反,这个时候的k才减去1,最后把数组里面的数值加起来得到最终答案。数组中的每个元素代表你在该位置可以跳跃的最大长度。你也可以先购买,然后在。
2024-11-12 11:12:09
590
原创 代码随想录第二十七天
这道题要求数组之间的差值是一正一负,并且当数组不满足时可以删除元素,那么我们设置两个变量,一个是目前的差值,一个是之前的差值,其实可以把这两个看成一个连续线段,一正一负可以看出顶峰,这时我们就可以做出这道题,但是注意,当几个元素相同时,相当于一条平滑直线时,我们只会取一个值,所以我们的之前的差值只能是当满足峰值条件时再进行重新赋值,最终得到答案。第一题和第二题并不是很难,但是第三题的要求的确挺麻烦,我用了两个方法都是时间超时,后面换了一个动态更改最大值最终得到答案。,这个孩子会得到满足。
2024-11-11 19:28:45
1043
原创 代码随想录第二十五天
这道题感觉跟前几道题很像,但是要注意,我们要去重还要找出按照递增顺序排列的子集,所以当找到的个数大于2时,就往数组里面放入,并且我们要注意递归元素的条件,一是递增,二是不能与前一个元素相同,不然会重复。全排列也是回溯算法的一种,这里要往最终返回的数组里面放入数字的前提条件是,递归的次数等于数组里面的元素个数,同时在放入元素的同时,我们要放入一个bool数组来判断这个元素是否已经加入到了数组里面,然后当递归结束开始回溯时,我们要还原元素的bool值,让他寻找新的路径,最终返回答案。返回所有不重复的全排列。
2024-11-09 19:22:00
787
原创 代码随想录第二十四天
这道题跟上面那道题的思路差不多,但是我们要注意当有相同元素时,我们只取其中一个进行递归,以免照成重复,所以在这道题中我们需要用到qsort函数来进行排序,然后去掉重复元素后进行递归的结果,就是我们的答案。这个跟昨天的题目很像,但是这里不用加上if条件,只需要一个一个进行寻找,为了防止子集找重,所以每次递归一次,start要加上1,最后返回结果,还是挺轻松的。第一道题的确很难,我对第一题不是特别清楚,后面的题都还好,只不过有一些思路的确不好想到,但是最终还是能做出来,第一题还需要多多复习和理解。
2024-11-08 19:15:53
800
5
原创 代码随想录第二十三天
这道题跟昨天的思路很像,但是要注意的是我们要添加合适的退出条件,比如当总和大于目标值时,我们要直接返回,结束递归,同时我们要加上相应的start来寻找元素的正确位置,以免找到重复元素,以及从题目所给数组取元素的所对元素要把它按所取元素的最大元素个数来创造,以免超出数组的界限。这道题的思路跟前面都差不多,但是这里最重要的是去重,所以在这里我用了一个qsort函数,把整个数组进行了重新排序,当后一个数组元素和前一个数组元素一样时,我们跳过后一个数组元素,后面就是之前的回溯方法。对于给定的输入,保证和为。
2024-11-07 20:55:24
595
2
原创 代码随想录第二十二天
回溯算法是一种基于递归思想的算法设计技术,适用于解决需要构造所有解或找到特定解的组合问题。回溯的基本思路是通过系统地搜索所有可能的解决方案,然后逐步撤销不符合要求的选择,回到上一步继续尝试。这种算法最适合应用于决策树、排列组合、子集生成等涉及多阶段决策问题的场景。
2024-11-06 22:32:41
1105
原创 malloc的底层实现
malloc分配的是虚拟内存,因为这样能够让操作系统为每个进程提供独立的地址空间,简化内存管理,增加安全性,防止碎片化,并提供更大的内存空间供应用程序使用。空闲链表存储着当前堆中所有空闲的内存块,链表中的块可以按大小排序,或使用分级链表存储(即每个链表存储特定大小范围的块)。2.如果程序需要多个独立的内存块,或者要求内存块有特定的对齐要求,那么我们也选择mmap,它的独立性使得取多个内存块更加快速。块头之后是用户可以使用的内存区域。2.是连续的内存块,它分配的内存块是连续的,所以它的堆管理更加简单。
2024-11-05 20:37:42
1077
原创 代码随想录第二十一天
这道题给了我们相应的范围,所以我们递归时删除的元素就是不在范围之内的元素,因为是二叉搜索树所以我们可以用二叉搜索树的性质,当元素过大我们找它的左节点,当元素过小我们找它的右节点,并且找完后还需要把找到的元素带入条件进行判断,最终返回节点得到答案。这道题我们可以看出我们取中间为根节点,左边为左子树,右边为右子树,然后递归的基线条件是左索引大于右索引,然后就是简单的递归,返回根节点即可。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。
2024-11-05 16:40:14
401
原创 大端存储和小端存储
我们从最开始的汇编语言就可以知道,数据与程序在内存里面以二进制的形式进行存储,而它们进行存储的时候我们可以知道它以什么作为单位,比如就拿我最近学的8086CPU作为例子,它可以一次性处理以下的两种尺寸的数据。1.字节:一个字节由8个bit组成,可以存在8位寄存器中。2.字:一个字由两个字节组成,在一个字中我们可以分成高位字节和低位字节,如下图。接下来我们就来说一下什么是大端存储什么是小端存储了。当一个多字节的数据(例如 32 位整数)被存储在内存中时,需要决定这些字节的存储顺序。
2024-11-04 21:42:12
1079
2
原创 代码随想录第二十天
首先我们需要创建一个用来寻找最小右子节点,然后开始创建所需的递归函数,先判断节点是否为空节点,在判断是应该遍历左节点还是右节点,然后我们开始清除相应的节点,如果如果左子节点为空,则节点要么没有子节点,要么只有右子节点。这里我们要新建一个递归函数,当根节点为空时,我们就等于想要插入的点,当根节点大于插入的节点时,我们就插入到左节点,当根节点小于插入的节点时,我们就插入到右节点,最终返回最开头的根节点,得到最终答案。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
2024-11-04 10:58:41
486
原创 代码随想录第十八天
跟上一题的思路一样,把它们整理为一个有序的数组,然后我们使用一个数组来计算它们的次数,但是要注意这道题的节点值有可能会是负数,所以我们计算它的最大值和最小值,最大值为最后一个元素,最小值为第一个元素,然后我们计算出最大值到最小值相差的数值,因为有负数,所以我们用数组的每一个元素减去最小值的元素,来保证每一个数都为正数,后面就是单纯的处理数值个数的多少了,但是要注意的是后面把总数加入数组时要把值全部往左偏移为原本的大小。,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
2024-11-02 17:58:25
687
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人