自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(247)
  • 资源 (1)
  • 收藏
  • 关注

原创 从零学算法3100

该问题要求计算最多能喝到的水瓶数量。初始有numBottles满水瓶,每次可以喝完任意数量或用空瓶兑换新水瓶(兑换比例为numExchange,且每次兑换后numExchange增加1)。通过模拟喝水与兑换过程,可以逐步累加喝水量。两种解法:第一种使用empty变量记录空瓶数量,完整模拟喝水兑换过程;第二种将喝水与兑换合并处理,每次喝numExchange瓶后兑换1瓶。最终喝水量为累计兑换水量加上剩余未兑换的满瓶数。两种方法都能正确求解,时间复杂度取决于兑换次数。

2025-11-20 10:00:16 350

原创 从零学算法1334

该问题要求在给定城市图和距离阈值的情况下,找到可达邻居城市最少且编号最大的城市。解题思路如下: 使用Floyd-Warshall或Dijkstra算法计算每对城市间的最短路径 对每个城市,统计在阈值距离内的可达城市数量 找到可达城市数最少的城市,若多个则选择编号最大的 关键点在于高效计算所有城市间的最短路径,并正确处理多条路径情况下剩余权重的比较。通过动态规划或优先队列优化路径计算,确保在O(n^3)时间复杂度内解决问题。最终比较各城市的可达邻居数,返回符合条件的结果。

2025-11-19 15:29:48 371

原创 从零学算法2536

本文提出了一种使用差分数组技术高效处理二维矩阵区域加法操作的算法。给定n×n零矩阵和若干子矩阵范围查询,算法通过为每行维护一维差分数组,将每个查询转换为对受影响行区间的差分标记更新操作。具体实现时,对每个查询在起始列位置加1,结束列后一位置减1,最后通过前缀和还原每行元素值。该方法将时间复杂度从暴力解法的O(n²×m)优化到O(n² + n×m),其中m为查询数量,适用于大规模矩阵更新场景。示例演示了算法如何逐步处理多个子矩阵加法操作并生成最终结果矩阵。

2025-11-18 14:34:43 289

原创 从零学算法3228

摘要:题目要求计算二进制字符串中通过移动'1'到末尾能获得的最大操作次数。关键思路是统计连续的'1'个数,每遇到连续的'0'时,操作次数累加当前'1'的个数。例如"1001101"可通过4次操作变为"0001111"。解法使用双指针或单次遍历,时间复杂度O(n)。示例代码展示了两种实现方式,均通过维护ones计数和ans累加来高效求解。

2025-11-13 09:34:57 238

原创 从零学算法1526

本文研究了如何通过最少次数的子数组增量操作将初始全零数组转换为目标数组。关键思路是利用差分数组的性质,将问题转化为统计差分数组中正数之和。实验表明,只需累加数组中每个元素比前一个元素大的差值(即差分数组的正数部分),就能得到最小操作次数。该算法时间复杂度为O(n),空间复杂度为O(1),高效解决了原问题。例如,对于目标数组[1,2,3,2,1],最小操作次数为3次。

2025-10-31 15:57:12 338

原创 从零学算法2048

题目要求找出严格大于给定整数n的最小数值平衡数。数值平衡数的定义是:每个数位d在数字中恰好出现d次。摘要如下: 解法一:直接枚举法。从n+1开始逐个检查每个数是否满足数值平衡数的条件,即统计数字中每个数位的出现次数是否等于该数位本身的值。该方法简单直接但效率较低。 解法二:打表+二分查找。通过回溯算法预先生成所有可能的数值平衡数(最多7位数),然后对结果排序并使用二分查找快速定位大于n的最小平衡数。该方法利用预处理提高查询效率,适用于多次查询场景。 两种方法都能解决问题,枚举法适合单次查询,打表法则通过空间

2025-10-24 11:16:45 258

原创 从零学算法71

本文介绍了如何简化Unix风格的绝对路径字符串。核心规则包括:处理"."(当前目录)、".."(上级目录)和连续斜杠,最终返回规范路径。解题思路是使用栈来模拟路径访问:1)按斜杠分割路径;2)遍历时忽略"."和空内容;3)遇到".."弹出栈顶(返回上级);4)其他情况压入栈(进入下级)。示例代码展示了JavaScript实现,通过split、pop和push操作完成路径简化,最后用join拼接结果。该算法能正确处理各种边界情况,

2025-10-22 16:33:30 227

原创 从零学算法67

摘要: 该算法实现两个二进制字符串的加法。通过反转字符串从低位到高位逐位相加,处理进位(pre变量),超出下标的位补0。最后检查最高位是否有进位,返回结果字符串。例如,"11"+"1"="100","1010"+"1011"="10101"。时间复杂度O(max(m,n)),空间复杂度O(1)。关键步骤包括反转、逐位求和、进位处理及结果拼接。

2025-10-22 16:13:20 172

原创 从零学算法61

摘要:旋转链表问题要求将链表的每个节点向右移动k个位置。解法主要分为三步:1)计算链表长度len,实际旋转次数times=k%len;2)若链表为空、单节点或times=0,直接返回原链表;3)通过遍历找到新链表的尾节点和头节点,重新连接前后半段。更优解法是将链表首尾相连成环,移动(len-times)步后断开环,新头节点即为断开处的下一个节点。时间复杂度O(n),空间复杂度O(1)。

2025-10-22 11:00:55 226

原创 从零学算法59

这篇文章介绍了一个生成顺时针螺旋排列的n×n矩阵的算法。给定正整数n,算法需要填充从1到n²的数字,按照顺时针方向螺旋排列。核心思路是定义四个移动方向(右、下、左、上),从初始位置(0,-1)开始遍历。当遇到边界或已填充的格子时,回退并改变方向。通过JavaScript代码实现,时间复杂度为O(n²),空间复杂度为O(n²)。该算法适用于1≤n≤20的情况,能够正确生成示例所示的螺旋矩阵。

2025-10-21 11:26:01 128

原创 从零学算法1717

本文提出了一种贪心算法来解决字符串删除子串获得最大得分的问题。算法通过比较两种操作(删除"ab"或"ba")的得分,优先处理得分更高的操作。具体步骤包括:1)调整参数使x始终为更高得分;2)将字符串分割为仅含a和b的连续子串;3)使用栈的思想统计"ab"和"ba"子串的数量,其中"ab"通过栈匹配计算,"ba"通过剩余字符的最小值计算。最终将各子串得分相加得到最大总得分。该方法高效处理了大

2025-10-20 15:11:09 280

原创 从零学算法3355

本文探讨了如何判断通过区间减法操作能否将数组变为全零。关键在于利用差分数组高效处理区间减法,避免直接操作导致超时。具体方法为:1) 构建差分数组记录每个查询的区间变化;2) 通过前缀和还原每个位置的累计操作次数;3) 检查每个元素的操作次数是否足够使其归零。最终优化方案直接基于查询构建差分,无需预先处理原数组,时间复杂度为O(n+m),适用于大规模数据。该方法通过差分技巧巧妙地将区间操作转换为单点更新,显著提升了计算效率。

2025-10-17 16:50:44 836

原创 从零学算法452

该问题要求用最少的箭射爆所有气球,转化为区间合并问题。关键思路是:将气球区间按右端点排序,遍历时若当前区间与前一区间无交集则需增加箭数。通过维护前一区间的右端点,若当前区间起点大于该端点则说明不重叠。这样只需判断区间起点与前一个区间的右端点关系即可确定是否需要新增箭。最优解法时间复杂度为O(nlogn),主要来自排序步骤。

2025-10-16 17:21:54 229

原创 从零学算法57

文章摘要: 题目要求在已排序且无重叠的区间列表中插入新区间,并保持区间有序且不重叠。核心思路是遍历原有区间,分三种情况处理:1) 当前区间在新区间左侧且无交集时直接加入结果;2) 有交集时合并区间范围;3) 当前区间在右侧时先确保新区间已加入。最终检查新区间是否未被处理,若未处理则追加。通过维护合并后的start和end,以及标记hasAdd确保逻辑正确。时间复杂度为O(n),适用于较大数据规模。 示例:输入[[1,3],[6,9]]和[2,5],合并后输出[[1,5],[6,9]]。

2025-10-16 16:06:26 252

原创 从零学算法2598

本文讨论了如何计算对数组元素进行加减操作后能获得的最大缺失非负整数(MEX)。关键步骤是将所有元素调整到[0, value)范围内,通过取模运算实现。然后统计各余数的出现次数,从小到大依次消耗这些余数构造连续整数序列,直到某个余数不足时确定MEX。该方法的时间复杂度为O(n),适用于大规模数据。示例代码展示了使用数组统计余数并计算MEX的过程。

2025-10-16 14:45:39 383

原创 从零学算法219

摘要:本题要求判断数组中是否存在两个相同元素且下标差不超过k。两种解法:1)哈希表记录元素最后出现下标,遍历时检查是否满足条件;2)滑动窗口(大小为k)结合HashSet,实时维护窗口内元素,遇到重复即返回true。两种方法时间复杂度均为O(n),空间复杂度O(k)。示例验证了算法的正确性。

2025-10-15 16:09:41 149

原创 从零学算法2131

题目摘要:给定由双字母单词组成的数组,要求从中选取单词拼接出最长回文串(单词不可重复使用)。回文串需正反读相同,无法构成时返回0。解法核心:统计可配对的反转单词数量(如"lc"与"cl"),若单词自身反转相同(如"gg"),则取数量的一半;最后检查是否有剩余的自反单词可放中间。示例1输入["lc","cl","gg"]输出6("lcggcl"),示例2输入["

2025-10-14 15:57:51 390

原创 从零学算法3350

本文探讨了如何找到数组中相邻且长度相同的两个严格递增子数组的最大可能长度k。通过动态规划方法,首先预处理每个位置开始的最长递增子数组长度f[i]。在遍历时,检查两个条件:1)当前子数组与间隔f[i]的子数组是否都满足递增且相邻;2)当前子数组能否拆分为两个等长子数组。提供了两种实现方案:第一种使用动态规划数组预处理,第二种基于滑动窗口优化空间复杂度。两种方法都能在O(n)时间内解决问题,适用于长度达2×10^5的数组。示例显示对于[2,5,7,8,9,2,3,4,3,1]最优解为3,而[1,2,3,4,4,

2025-10-14 10:59:41 633

原创 从零学算法3349

文章摘要: 题目要求在数组中找到两个相邻且长度为k的严格递增子数组。通过动态规划或双变量遍历可高效解决。动态规划法从后向前计算每个位置开始的递增子数组长度,若存在相邻两段长度≥k则返回true。双变量法正向遍历,维护前一段(pre)和当前段(cur)长度,当两者均≥k或当前段能覆盖两段时返回true。示例1中[7,8,9]与[2,3,4]满足条件,返回true;示例2无满足条件的子数组,返回false。时间复杂度O(n),空间复杂度O(n)或O(1)。

2025-10-14 09:55:55 275

原创 从零学算法51

N皇后问题要求在n×n棋盘上放置n个互不攻击的皇后。使用回溯法解决,定义数组记录列和两条对角线上的皇后位置。递归时逐行放置,检查当前列和对角线是否冲突,若合法则继续递归下一行。当放置完n行时,将有效解存入结果。时间复杂度为O(n!),空间复杂度为O(n)。关键点在于通过行号差和列号差快速判断对角线冲突。

2025-10-13 15:44:56 320

原创 从零学算法438

摘要:题目要求在字符串s中找出所有与p为字母异位词的子串起始索引。使用滑动窗口法,通过统计p中各字母频次,在s中维护一个与p长度相同的窗口。当窗口内字母频次与p完全匹配时记录起始位置。Java实现通过调整窗口边界来确保频次匹配,时间复杂度O(n)。例如s="cbaebabacd", p="abc"时,输出[0,6]。该方法高效处理了字母频次统计和窗口滑动问题。

2025-10-11 11:31:18 239

原创 从零学算法3147

这篇文章摘要: 本文介绍了解决"从魔法师身上吸取最大能量"问题的两种算法。该问题要求从一排魔法师中选择起点,以固定间隔k跳跃吸收能量,计算可获得的最大能量总和。第一种方法是动态规划解法,通过状态转移方程f(n) = (n<k时取energy[n],否则根据前驱状态决定是否累加)来计算每个位置的最大能量,时间复杂度O(n)。第二种方法是枚举所有可能的终点位置,逆向计算跳跃路径上的能量和,取最大值,时间复杂度O(nk)。两种方法都能有效解决问题,但动态规划在大规模数据下效率更高。文章提

2025-10-10 14:46:01 183

原创 从零学算法1128

本文提出了一种计算等价多米诺骨牌对数量的算法。首先将每张骨牌标准化(小的数字在前),然后用哈希表记录每种标准化骨牌的出现次数。每当遇到重复的标准化骨牌时,将当前出现次数累加到结果中(利用组合数公式)。该方法通过一次遍历即可完成计算,时间复杂度为O(n),空间复杂度为O(n)。示例代码展示了该算法的JavaScript实现,其中使用两个哈希表分别记录标准化骨牌是否存在及其出现次数,从而高效地统计等价对数量。

2025-10-01 10:45:40 215

原创 从零学算法40

摘要:本文解决了组合总和II问题,要求在候选数组中找出和为target的不重复组合(每个元素只能用一次)。通过回溯算法,调整递归起点为i+1避免重复使用元素,并添加条件i>0 && i-1>=start && c[i]==c[i-1]来跳过同层重复元素,既保证解集不重复,又保留有效组合如[1,1,6]。代码实现先排序数组,再通过DFS递归搜索,剪枝优化提前终止无效路径。示例验证了算法的正确性。

2025-09-26 09:31:39 793

原创 从零学算法39

摘要:本文介绍了使用回溯算法解决组合总和问题。给定无重复元素的整数数组和目标值,找出所有和为目标的组合,允许数字重复使用。通过定义dfs函数遍历候选数组,每次递归时传入起始索引避免重复组合,并在数组排序后提前终止无效搜索以优化性能。Java实现展示了回溯过程中如何维护当前组合和状态,确保结果唯一性。

2025-09-26 09:31:00 418

原创 从零学算法166

摘要:本文探讨如何将分数转换为小数字符串,处理循环小数时用括号标记循环部分。方法通过模拟除法过程,记录余数出现位置判断循环节。核心步骤:1) 处理符号和整数部分;2) 余数补零继续除,记录余数序列;3) 当余数重复时,确定循环起始位置插入括号。例如4/333转换为"0.(012)"。算法需注意负数及边界条件,时间复杂度由循环节长度决定。

2025-09-26 09:18:48 253

原创 从零学算法32

本文介绍了求解最长有效括号子串的三种方法:栈、动态规划和贪心。栈方法通过维护未匹配右括号的下标边界来计算有效长度;动态规划利用状态转移方程处理不同括号情况;贪心算法通过双向遍历统计左右括号数来获取最大有效长度。三种方法时间复杂度均为O(n),空间复杂度栈和动态规划为O(n),贪心为O(1)。动态规划需处理边界条件,而贪心需两次遍历以防遗漏左括号过多的情况。

2025-09-16 09:05:37 419

原创 从零学算法31

摘要: 题目要求在给定整数数组中找出字典序更大的下一个排列。若不存在更大的排列,则返回最小排列。算法步骤:1)从后向前找第一个降序点i;2)若i=0,翻转整个数组;3)否则在i后找到最小的大于nums[i-1]的数交换,再翻转i后的部分。时间复杂度O(n),空间O(1)。例如[1,2,3]→[1,3,2],[3,2,1]→[1,2,3]。

2025-09-12 17:54:25 297

原创 从零学算法209

摘要:题目要求在正整数数组中找到满足子数组和≥target的最小连续子数组长度。采用滑动窗口解法:初始化窗口[i,j]和当前和sum。当sum不足时右扩窗口,否则记录长度并左缩窗口。需注意边界条件处理,如右指针越界时停止扩展。示例解法时间复杂度O(n),空间O(1)。关键点在于动态调整窗口范围并实时更新最小长度,最终返回结果或0(无解时)。两种代码实现思路一致,主要差异在窗口缩小策略上。

2025-09-12 16:00:54 189

原创 从零学算法1733

摘要:该算法解决社交网络中好友间因语言不通需最少用户学习新语言的问题。首先筛选无法沟通的好友对,统计这些人掌握的语言情况,选择最多人掌握的语言进行教学(使需学习人数最少)。例如,若某语言已被最多人掌握,则只需教会剩余人该语言即可实现所有好友沟通。算法时间复杂度主要取决于好友关系数量,适用于n≤500的场景。

2025-09-12 15:52:44 328

原创 从零学算法2327

本文研究了秘密传播问题,提出了三种动态规划解法。第一种方法使用know数组直接模拟每天新增的知道秘密人数,时间复杂度O(n^2)。第二种方法利用差分数组优化区间更新操作,将时间复杂度降至O(n)。第三种方法通过前缀和数组sum[j]表示第j天累计知道秘密的人数,通过sum[j-delay]-sum[j-forget]计算当天新增人数,最终结果为sum[n]-sum[n-forget]。所有方法都考虑了MOD取余处理,确保结果正确性。最优解法时间复杂度O(n),空间复杂度O(n),适用于n≤1000的约束条件

2025-09-12 14:27:36 445

原创 差分数组学习记录

差分数组是一种高效处理数组区间操作的数据结构。它将原数组的差值记录下来,使得对连续子数组的批量修改(如统一加减)只需修改差分数组的两个端点值,将时间复杂度从O(n)优化到O(1)。差分数组有两个核心特性:1)通过累加可还原原数组;2)区间操作转换为修改差分数组首尾元素。例如,对数组a[i..j]统一加10,只需使dif[i]+10、dif[j+1]-10。这种方法特别适用于需要频繁进行区间更新的场景。

2025-09-12 10:38:14 315

原创 从零学算法1094

本文解决拼车问题,判断是否能在给定行程中接送所有乘客而不超载。核心思路是使用差分数组记录各站点的乘客变动情况:上车时增加乘客数,下车时减少。然后遍历差分数组,计算实时乘客数,若超过容量则返回false。Java实现使用固定长度数组,而JS实现利用对象存储变动站点并按升序处理。两种方法的时间复杂度均为O(n),空间复杂度O(m)(m为站点数)。该解法高效地验证了行程安排的可行性。

2025-09-12 10:36:28 214

原创 从零学算法25

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head = [1,2,3,4,5], k = 2。输入:head = [1,2,3,4,5], k = 3。输出:[2,1,4,3,5]输出:[3,2,1,4,5]链表中的节点数目为 n。.K 个一组翻转链表。

2025-09-12 10:23:45 179

原创 从零学算法2749

摘要: 题目要求通过最少的操作使num1减至0,每次操作需选择整数i(0≤i≤60)并减去2^i + num2。关键在于确定操作次数k,使得num1 - num2*k可拆分为k个2的幂之和。解法通过枚举k,计算x=num1-num2*k的二进制中1的个数(最少拆分项数),若k满足k≥count(x)且k≤x,则返回k;否则返回-1。例如,num1=3、num2=-2时,通过拆分x=9为4+4+1(k=3)得到解。时间复杂度取决于枚举范围,适用于大数情况。

2025-09-09 10:04:31 815

原创 从零学算法24

本文介绍了如何在不修改节点值的情况下两两交换链表中的相邻节点。通过创建哨兵节点dummy指向链表头部,并使用temp变量记录上次交换后的尾节点,实现相邻节点的交换和链表连接。关键步骤包括:保存后续节点、交换当前节点对、连接前次交换结果、更新尾节点指针。算法时间复杂度为O(n),空间复杂度O(1),适用于0-100个节点的链表。示例代码展示了完整的JavaScript实现过程。

2025-09-09 08:56:58 217

原创 从零学算法679

本文介绍了24点游戏的解法,要求通过基本运算和括号将4个1-9的数字组合成结果为24的表达式。采用回溯算法,每次选择两个数进行六种运算(注意除法精度和处理),将结果与剩余数字组成新数组递归求解。通过误差容忍度(EPS=1e-9)判断是否达到24。算法时间复杂度约3888种可能,能有效处理所有合法组合。Java实现展示了核心递归逻辑,通过列表操作和误差比较来验证解的存在性。

2025-09-03 01:31:06 257

原创 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

2025-04-26 00:42:38 304

原创 Vue3 study

toRefs 和 toRef 都可以用来结构响应式对象,并且仍为响应式的// 为什么这里不是 sum.value?// 因为只能监视 ref 定义的数据,.value 则为一个基本数据类型的数据了})// 如何结束监视})如果直接写对象名,监视的是对象的地址值,若想监视对象内部数据,要手动开启深度监视细节:如果修改对象属性,你会发现 newVal 和 oldVal 的值相同,因为监视的对象并未改变,修改完属性后才进入 watch 函数读取的新旧对象是同一个;

2024-07-24 21:47:52 1093

原创 从零学算法2965

除上述的两个之外,对于所有满足1

2024-05-31 11:15:16 1389

黑马vue2+vue3

为了节省空间 node_modules 需要 `npm i` 自行下载

2025-03-09

b站黑马,ajax+webpack+node+git 学习

b站黑马,ajax+webpack+node+git 学习

2025-02-07

黑马前端pink的js视频个人代码笔记

黑马前端pink的js视频个人代码笔记

2025-01-05

个人b站pink前端html+css学习笔记

跟着视频做的笔记和文件

2024-10-24

Vue3 study 资源

笔记原 markdown 文件和图片

2024-07-24

MyBatis-Plus代码

MyBatis-Plus代码

2022-04-02

空空如也

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

TA关注的人

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