自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 生活规范以及指导家规

https://github.com/ZouJiu1/family-ruleshttps://zoujiu.com.cn/homepage#/csdn/markdown_detail/homepage?plan=/home/admin/vue-project/people/homepage/csdn_spider_selenium/article/2025-05-19_空格_19_00_06_生活规范以及指导—future家规/2025-05-21_21_01_45_markdown.md

2025-05-21 21:23:15 319

原创 leetcode 624. Maximum Distance in Arrays 数组列表中的最大距离

本文介绍了一种求解数组列表中最大距离的高效算法。问题要求找出不同数组的首尾元素差的最大绝对值。通过维护当前最大值和最小值,在遍历过程中动态更新这两个值并与后续数组元素比较,可以在O(n)时间内解决问题。相比暴力法的O(n²)时间复杂度,该方法显著提高了效率。代码实现简洁,使用两个变量分别记录已遍历数组的最大末尾值和最小起始值,每次与新数组的首尾元素计算可能的距离并更新结果。最终返回所有可能距离中的最大值即为所求。

2025-11-24 22:17:58 112

原创 leetcode 628. Maximum Product of Three Numbers 三个数的最大乘积

摘要:本文解决了LeetCode 628题"三个数的最大乘积"问题。通过将数组分为负数和非负数两部分,并分别排序后处理不同情况:全负数时取三个最大负数相乘;存在非负数时比较两个最小负数与最大非负数的乘积和三个最大非负数的乘积,取较大值。该方法确保了在所有可能情况下都能找到三个数的最大乘积,时间复杂度主要由排序决定。代码实现了分类讨论的逻辑,正确处理了各种边界情况。

2025-11-24 21:39:27 68

原创 leetcode 623. Add One Row to Tree 在二叉树中增加一行

本文介绍了在二叉树中增加一行的解决方案。当目标深度为1时直接创建新根节点。对于其他情况,采用深度优先搜索,当到达depth-1层时,保存当前节点的左右子树,创建新节点并插入,新节点的左右子树分别指向原左右子树。该方法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。关键点在于提前终止递归,避免不必要的遍历。

2025-11-24 21:20:16 173

原创 leetcode 622. Design Circular Queue 设计循环队列

本文实现了一个循环队列数据结构。使用固定大小的vector存储元素,初始化时填充特殊值CONST(999999)标记空位。维护front和end指针分别指向队首和队尾,index指针指示下一个可插入位置。主要操作包括:enQueue在队尾插入元素(当有空位时),deQueue移除队首元素,Front和Rear分别获取队首和队尾元素。通过检查front和end指针是否指向CONST来判断队列是否为空,通过计算指针间隔判断是否已满。所有指针在到达数组末尾时循环回到开头,实现循环队列功能。时间复杂度均为O(1)。

2025-11-24 21:00:44 29

原创 leetcode 617. Merge Two Binary Trees 合并二叉树

本文介绍了一种递归合并两棵二叉树的方法。当两棵树的对应节点都存在时,将它们的值相加并递归处理左右子树;若只有一棵树的节点存在,则直接返回该节点;若都为空则返回空指针。该方法通过深度优先搜索遍历树结构,最终返回合并后的树。时间复杂度为O(min(m,n)),空间复杂度为O(min(m,n)),其中m和n分别是两棵树的节点数。

2025-11-24 20:26:29 27

原创 leetcode 621. Task Scheduler 任务调度器

本文解决了LeetCode 621题任务调度器问题。该问题要求在给定任务列表和冷却时间n的情况下,计算完成任务的最短时间。解决方案采用优先队列和哈希表结合的方式: 使用优先队列按任务剩余次数排序,优先处理剩余次数最多的任务 维护冻结时间哈希表,记录每个任务的冷却状态 每次循环时: 更新所有任务的冷却时间 从优先队列取出可执行任务执行,并设置其冷却时间 若无任务可执行则进入空闲状态 直到所有任务完成,返回总时间 该方法通过优先处理高频任务和合理管理冷却时间,确保在最短时间内完成任务调度。时间复杂度为O(N),

2025-11-23 22:29:35 112

原创 leetcode 611. Valid Triangle Number 有效三角形的个数

摘要 本文探讨了如何统计数组中能构成有效三角形的三元组个数。通过将数组排序,并利用二分查找优化搜索过程。对于每对边,计算其和,并使用二分查找确定第三边的上限,从而快速统计满足三角形不等式的组合数。算法时间复杂度为O(n² log n),空间复杂度为O(1)。

2025-11-23 21:51:46 87

原创 leetcode 609. Find Duplicate File in System 在系统中查找重复文件

摘要: 该解决方案用于在文件系统中查找内容重复的文件。使用哈希表存储文件内容(content)与对应文件路径列表的映射关系。通过遍历每个路径字符串,提取文件路径和内容,并将完整路径存入哈希表。最后筛选出内容重复(对应多个文件路径)的条目作为结果返回。主要涉及字符串查找和分割操作,时间复杂度为O(n*m),其中n是路径数,m是平均路径长度。

2025-11-23 21:30:55 60

原创 leetcode 592. Fraction Addition and Subtraction 分数加减运算

本文提出了一种分数加减运算的解决方案。算法首先解析输入字符串,分离出分子和分母存入两个列表。然后计算所有分母的最小公倍数:通过辗转相除法求最大公约数,再计算每两个数的最小公倍数并迭代。将所有分数通分后相加,最后约分结果。时间复杂度主要取决于分数个数和分母大小,空间复杂度为O(n)。该方法有效解决了分数运算问题,正确处理了正负号和约分情况。

2025-11-23 21:01:06 185

原创 leetcode 606. Construct String from Binary Tree 根据二叉树创建字符串

本文解决了LeetCode 606题"根据二叉树创建字符串"的问题。采用深度优先搜索(DFS)方法递归处理二叉树节点,将二叉树转换为特定格式的字符串。算法核心是:当节点为空时返回空字符串;否则先处理当前节点值,再递归处理左右子树。根据左右子树是否为空进行不同处理:若都为空则直接返回当前值;若仅右子树为空则省略右括号;若仅左子树为空则保留空括号。最终将所有部分按规则拼接成结果字符串。该方法时间复杂度O(n),空间复杂度O(n),适用于任意二叉树结构。

2025-11-22 21:18:54 166

原创 leetcode 605. Can Place Flowers 种花问题

本文解决LeetCode 605题种花问题,判断在给定花坛中能否种植n朵花。花坛用0和1表示空位和已有花,要求新花不能相邻。解法遍历数组,检查连续三个0的位置即可种植,并减少n值。处理了边界条件如单元素数组和n=0的情况。时间复杂度O(n),空间复杂度O(1)。代码通过逐个检查相邻位置实现,当n减至0时提前返回true。

2025-11-22 20:35:21 211

原创 leetcode 599. Minimum Index Sum of Two Lists 两个列表的最小索引总和

题目599要求找出两个字符串列表中共有的元素,且这些元素的索引和最小。如果存在多个满足条件的元素,则全部返回。 解决方法是双重遍历两个列表,比较字符串是否相同。当找到相同字符串时,计算其索引和:若该和小于当前最小值,则清空结果列表并更新最小值;若等于当前最小值,则直接添加到结果列表。最终返回结果列表中的所有字符串。 该方法时间复杂度为O(n*m),空间复杂度为O(k),其中n和m为列表长度,k为结果元素个数。

2025-11-21 20:54:16 115

原创 leetcode 598. Range Addition II 区间加法 II

题目要求计算在给定m×n矩阵上执行一系列增量操作后,最大值元素的个数。每次操作将矩阵左上角(0,0)到(a,b)矩形区域内的元素加1。 关键思路是找出所有操作的最小公共区域,因为该区域会被所有操作覆盖,其值最大。因此只需统计所有操作中最小的a和b,它们的乘积即为最大值区域的大小。若没有操作,则整个矩阵都是初始值0。 解决方案时间复杂度O(n),空间复杂度O(1)。代码通过遍历操作数组,记录最小的a和b,最后返回它们的乘积。

2025-11-21 20:47:16 176

原创 leetcode 594. Longest Harmonious Subsequence 最长和谐子序列

本文介绍了如何求解最长和谐子序列的长度。和谐子序列定义为序列中最大值和最小值的差恰好为1。解题思路是:首先统计每个数字出现的频率,然后检查相邻数字是否相差1,若是则计算两者频率之和并更新最大值。这种方法的时间复杂度和空间复杂度均为O(n),其中n为输入数组长度。代码使用哈希表统计频率,再转换为有序列表进行相邻元素比较。最终返回满足条件的最大子序列长度。

2025-11-21 20:39:50 136

原创 leetcode 593. Valid Square 有效的正方形

方法思路 该问题要求判断给定的四个点是否能构成一个有效的正方形。关键在于确定四个点之间的边长关系。有效的正方形应满足以下条件: 所有边长相等,且对角线长度相等且为边长的√2倍。 边长不能为零,即四个点不能重合。 相邻边必须垂直,即内积为零。 解决代码 class Solution { public: bool validSquare(vector& p1, vector& p2, vector& p3, vector& p4) { set te; vector> tor = {p1, p2, p3, p4}

2025-11-21 20:29:24 203

原创 leetcode 590. N-ary Tree Postorder Traversal N 叉树的后序遍历

本文介绍了N叉树后序遍历的两种实现方法。第一种是递归深度优先搜索(DFS),第二种是使用栈的迭代方法。递归方法直接按后序顺序访问节点,而迭代方法通过栈模拟前序遍历后再反转结果来实现后序效果。代码展示了C++实现,递归方法注释掉了,实际使用的是栈方法:将根节点入栈,每次弹出节点并记录值,然后将子节点按顺序入栈,最后反转结果列表得到后序遍历序列。时间复杂度为O(n),空间复杂度为O(n)。

2025-11-20 21:36:31 159

原创 leetcode 589. N-ary Tree Preorder Traversal N 叉树的前序遍历

该题目要求实现N叉树的前序遍历。提供了两种解法:递归DFS和迭代栈方法。递归方法先访问根节点,再递归遍历子节点;迭代方法使用栈,每次弹出栈顶节点并记录值,然后逆序压入子节点以确保前序顺序。两种方法时间复杂度均为O(n),空间复杂度递归为O(h)(树高),迭代为O(n)。最终返回节点值的前序遍历序列。

2025-11-20 21:32:06 155

原创 leetcode 1143. Longest Common Subsequence 最长公共子序列

该题解使用动态规划求解最长公共子序列问题。通过构建二维dp数组,其中dp[i][j]表示text1前i个字符和text2前j个字符的最长公共子序列长度。当字符相等时,dp[i][j]等于左上角值加1;否则取左边或上边的最大值。时间复杂度O(n1n2),空间复杂度O(n1n2)。最终返回dp[n1][n2]即为结果。

2025-11-20 20:36:11 399

原创 leetcode 583. Delete Operation for Two Strings 两个字符串的删除操作

该题解使用动态规划求解两个字符串的最小删除操作次数。构建一个二维dp数组,其中dp[i][j]表示使word1前i个字符和word2前j个字符相等所需的最小删除次数。初始化时,若其中一个字符串为空,则需删除另一字符串的所有字符。状态转移时,若当前字符相同则继承前一个状态,否则取删除word1或word2当前字符的最小值加1。最终返回dp[n1][n2]即为结果,时间复杂度和空间复杂度均为O(n1*n2)。

2025-11-19 22:23:45 295

原创 leetcode 581. Shortest Unsorted Continuous Subarray 最短无序连续子数组

摘要: 题目要求寻找最短的无序连续子数组长度。解法利用单调栈分别从左右两侧扫描数组,找出不符合单调性的元素边界。左侧扫描找到非递减的最小索引,右侧扫描找到非递减的最大索引。最终通过两边界计算子数组长度。若数组已有序则返回0。该方法时间复杂度为O(n),空间复杂度为O(n)。

2025-11-19 22:13:04 179

原创 leetcode 576. Out of Boundary Paths 出界的路径数

摘要:该文介绍了LeetCode 576题“出界的路径数”的解法。采用记忆化搜索(DFS)结合剪枝优化,避免超时。关键剪枝策略是:当起始位置距离边界所需步数超过剩余步数时直接返回0。使用三维数组dp记录状态,通过4个方向递归搜索可能路径。时间复杂度优化后为O(mnmaxMove),空间复杂度同样为O(mnmaxMove)。最终路径数取模1e9+7后返回结果。

2025-11-19 21:12:29 141

原创 leetcode 575. Distribute Candies 分糖果

题目描述:给定一个整数数组表示糖果类型,数组长度为偶数,需将这些糖果均分给兄妹两人。求妹妹能获得的最大糖果种类数。 解题思路: 若糖果种类数不超过总数的一半,则妹妹可获得全部种类 否则最多只能获得总数一半的不同种类糖果 解决方法: 对糖果数组排序,计算不同种类数量 比较种类数和总数的一半,取较小值作为结果 时间复杂度:O(nlogn)(排序耗时) 空间复杂度:O(1)(仅使用常数空间)

2025-11-18 22:26:28 374

原创 leetcode 572. Subtree of Another Tree 另一棵树的子树

这道题判断一个二叉树subRoot是否是另一个二叉树root的子树。解法采用两次深度优先搜索:第一次遍历root的各个节点,第二次将当前节点与subRoot比较是否完全相同。比较时需要同时检查节点值和左右子树结构是否一致。如果找到完全匹配的子树就立即返回。最终通过递归检查root的左右子树来确定是否存在匹配的子树。这种方法效率较高,时间复杂度为O(n*m),其中n和m分别是两棵树的节点数。

2025-11-18 22:06:31 221

原创 leetcode 567. Permutation in String 字符串的排列

本文提出了一种判断字符串s2是否包含s1的任意排列的滑动窗口解决方案。采用两个长度为26的数组分别统计s1字母频次和滑动窗口内的字母频次。初始化时统计s1频次和第一个窗口频次。随后滑动窗口,每次移动时更新频次:移除左边界字符,添加右边界字符。若当前窗口频次与s1频次完全匹配则返回true。该方法时间复杂度O(n),空间复杂度O(1),高效利用了固定大小字母表的特性。

2025-11-17 22:20:13 377

原创 leetcode 566. Reshape the Matrix 重塑矩阵

本文提出了一种重塑矩阵的解决方案。首先检查目标维度是否与原矩阵相同或元素总数不匹配,直接返回原矩阵或错误。然后将原矩阵元素展开为一维数组,再按目标维度重新填充为新矩阵。该方法时间复杂度为O(mn),空间复杂度为O(mn),适用于任何合法的矩阵重塑操作。C++实现展示了完整的处理流程,包括边界条件检查和元素重新排列。

2025-11-17 22:06:19 378

原创 leetcode 565. Array Nesting 数组嵌套

文章摘要: 该题解通过遍历数组,利用哈希表记录已访问元素,避免重复计算同一循环序列的长度。核心思路是每个数字只能属于一个固定长度的循环序列,因此只需从未访问过的数字出发,统计序列长度即可。算法时间复杂度为O(n),空间复杂度O(n)。代码使用数组mem标记访问状态,并通过哈希表mp检测循环,最终返回最长的循环序列长度。当发现长度等于数组大小时直接返回,进一步优化效率。

2025-11-16 22:29:15 289

原创 leetcode 563. Binary Tree Tilt 二叉树的坡度

本文解决了LeetCode 563题"二叉树的坡度"问题。通过深度优先搜索(DFS)递归遍历二叉树,在计算每个节点左右子树累加和的同时,计算其坡度(左右子树和的绝对差)并累加。最终返回所有节点坡度的总和。算法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。使用后序遍历确保在计算当前节点坡度前已获得左右子树的和,实现了高效求解。

2025-11-15 22:01:11 127

原创 leetcode 561. Array Partition 数组拆分

文章摘要: LeetCode 561题要求将数组分成n对,使得所有数对中较小值的总和最大。为使总和最大化,应尽可能减少每组数对中较大值与较小值的差距。因此,最优策略是将数组排序后,相邻两个元素组成一对,这样每组中的较小值即为排序后的偶数位元素。通过累加这些元素即可得到最大总和。代码实现先对数组排序,然后遍历数组累加偶数索引处的元素。时间复杂度为O(n log n),空间复杂度为O(1)。

2025-11-15 21:48:11 198

原创 leetcode 559. Maximum Depth of N-ary Tree N 叉树的最大深度

摘要:本文解决了LeetCode 559题"N叉树的最大深度"问题。采用深度优先搜索(DFS)算法,递归遍历每个节点,计算其子节点的最大深度并加1。对于空节点返回0,叶子节点返回1。该方法时间复杂度为O(N),空间复杂度为O(H),其中N为节点数,H为树高度。代码简洁高效,准确计算N叉树的最大深度。

2025-11-15 21:38:30 138

原创 leetcode 560. Subarray Sum Equals K 和为 K 的子数组

摘要:本文探讨了LeetCode 560题"和为K的子数组"的两种解法。第一种使用前缀和数组,通过两层循环计算满足条件的子数组数量,时间复杂度O(n²)。第二种优化方法利用哈希表存储前缀和出现次数,在遍历时查找sum-k是否存在,将时间复杂度降至O(n)。两种方法都通过计算前缀和来判断子数组和是否等于k,但哈希表方法显著提高了效率。代码展示了两种实现方式,体现了算法优化的思路。

2025-11-14 22:06:34 169

原创 leetcode 557. Reverse Words in a String III 反转字符串中的单词 III

题目要求反转字符串中的每个单词(由空格分隔),同时保持单词顺序不变。本文提供了一种C++解决方案:遍历字符串,当遇到空格时,提取当前单词并反转后加入结果字符串。最后处理末尾单词(如果没有以空格结尾)。该方法时间复杂度为O(n),空间复杂度为O(n),其中n是字符串长度。关键点在于正确处理单词边界和空格位置,确保每个单词都被独立反转。

2025-11-14 21:50:48 104

原创 leetcode 556. Next Greater Element III 下一个更大元素 III

本文探讨了寻找给定整数n的下一个更大数字的问题,其数值需由n的各位数字重新排列组成。通过数学方法优化了回溯算法可能导致的超时问题。核心思路是:从数字末尾找到第一个非升序的终止位置,交换该位置与后面稍大的数字,并对剩余数字升序排列拼接。时间复杂度O(n),空间复杂度O(1)。代码实现中先定位关键位置,交换并排序后处理整数溢出情况,最终返回符合要求的最小更大数值或-1表示不存在。

2025-11-10 00:37:43 302

原创 leetcode 554. Brick Wall 砖墙

本文提出了一种解决LeetCode 554题"砖墙"问题的方案。通过计算砖墙每一行的累加和,并使用哈希表记录边缘位置出现的频率,找出可以跳过最多砖层的垂直线。关键点包括不统计最右边缘,并用长整型防止溢出。最终结果由总行数减去哈希表中的最大值得到。该方法有效解决了寻找最少穿过砖块数的垂直线问题。

2025-11-09 23:52:13 99

原创 leetcode 551. Student Attendance Record I 学生出勤记录 I

题目概述 题目要求判断学生的出勤记录是否符合奖励条件。记录由'A'(缺勤)、'L'(迟到)、'P'(出席)组成,奖励条件为: 缺勤次数不超过1次; 连续迟到不超过2次。 解题思路 遍历字符串,分别统计缺勤次数和连续迟到次数。如果缺勤次数≥2或连续迟到次数≥3,直接返回false;否则遍历结束后返回true。 代码实现 初始化缺勤计数器sum和连续迟到计数器ll为0; 遍历字符串: 遇到'L'时,ll加1;否则重置ll为0; 遇到'A'时,sum加1; 检查sum≥2或ll≥3,满足则返回false; 遍历结

2025-11-09 22:46:03 123

原创 leetcode 553. Optimal Division 最优除法

2025-11-08 21:56:25 123

原创 leetcode 543. Diameter of Binary Tree 二叉树的直径

本文解决LeetCode 543题(二叉树的直径)问题。通过递归计算每个节点的左右子树高度,在遍历过程中累加左右高度,保存最大值即为所求直径。算法时间复杂度O(n),空间复杂度O(h)(树的高度)。核心思路是:对于每个节点,其直径等于左子树高度+右子树高度,全局维护最大值即可得到整棵树的直径。

2025-11-08 21:20:13 178

原创 leetcode 547. Number of Provinces 省份数量

本文介绍了使用并查集解决LeetCode 547题"省份数量"的方法。给定一个表示城市连接关系的邻接矩阵,要求计算连通分量的数量(即省份数)。通过初始化并查集数组,遍历矩阵合并相连城市,最后统计根节点数量得到结果。实现中采用路径压缩和按秩合并优化,时间复杂度接近线性。示例代码展示了完整的并查集实现过程,最终返回连通分量个数作为省份数量。

2025-11-07 23:44:44 185

原创 leetcode 542 01 Matrix 01 矩阵

2025-11-07 23:34:07 105

原创 leetcode 541. Reverse String II 反转字符串 II

该题目要求对字符串进行每隔2k个字符反转前k个字符的处理。解决方案使用双指针法,将字符串分割为多个2k长度的区间,对每个区间的前k个字符进行反转。通过维护左右指针l和r来划定处理范围,判断剩余字符数是否足够k个来决定反转范围。最后将处理后的子字符串拼接得到最终结果。时间复杂度O(n),空间复杂度O(n)。

2025-11-07 22:23:22 304

PAT甲级考试的题解和分类

PAT甲级考试的题解和分类,主要是题目的分类,和相应的容易错误的点,可以帮助的,还是挺好的内容

2024-01-26

考研数学的考点,自己写的考研数学的各科考点,可以加入自己的笔记

考研数学一的考点.docx ,自己写的考研数学的各科考点,可以加入自己的笔记 https://www.alipan.com/s/nFjvkzMivLf 数学一的考点.docx https://www.alipan.com/s/nFjvkzMivLf 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

2024-01-26

PAT甲级考试的题解和分类

PAT甲级考试的题解和分类,主要是题目的分类,和相应的容易错误的点,可以帮助的,还是挺好的内容

2023-05-15

空空如也

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

TA关注的人

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