- 博客(127)
- 收藏
- 关注
原创 【力扣hot100】 437. 路径总和 III
题目要求计算二叉树中节点值之和等于给定目标值的路径数目。路径只需向下延伸,不要求从根节点开始或叶子节点结束。采用双重DFS解法:外层遍历每个节点作为起点,内层递归计算以当前节点为起点的所有可能路径和。当路径和等于目标值时计数。时间复杂度O(n²),空间复杂度O(n)。示例输入验证了该方法的正确性,能处理节点值范围大和树结构复杂的情况。
2026-05-06 13:19:01
417
原创 *【力扣hot100】 33. 搜索旋转排序数组
题目要求在旋转后的有序数组中查找目标值,要求时间复杂度为O(logn)。摘要如下: 给定一个旋转后的升序数组(如[4,5,6,7,0,1,2])和目标值,需用二分查找返回目标值的下标或-1。常规遍历解法为O(n),不符合要求。正确解法应通过比较中间值与左右边界来判断有序区间,并在对应区间继续二分搜索。示例:在[4,5,6,7,0,1,2]中查找0返回4,查找3返回-1。关键点在于利用旋转数组部分有序的特性进行二分查找。
2026-05-05 13:58:35
249
原创 【力扣hot100】 221. 最大正方形
本文探讨了在0-1矩阵中寻找最大全1正方形面积的问题。通过动态规划方法,以dp[i][j]表示以(i,j)为右下角的最大正方形边长,状态转移方程为:若matrix[i][j]为'1',则dp[i][j]等于左、上、左上三个方向最小值加1。边界条件为当i或j为0时直接取1。最终结果为所有dp[i][j]中最大值的平方。该解法时间复杂度为O(mn),空间复杂度为O(mn),适用于m,n≤300的矩阵。
2026-05-04 13:07:21
540
原创 QML组件之间的通信方案(暴露子组件)
本文总结了QML组件通信的两种实践方案:一是使用property alias暴露组件属性实现跨组件调用,但存在封装性不足的问题;二是通过封装函数提供接口,更符合封装原则。作者以登录页面为例,展示了如何通过别名机制暴露文本框组件,后改进为封装clearFocus()函数来实现点击背景取消焦点的功能。虽然第一种方案最终被弃用,但记录了开发过程中的有益尝试。当前方案虽不完美,但提供了实用的组件通信思路,为后续优化奠定了基础。
2026-05-03 13:27:49
1375
原创 【力扣hot100】55. 跳跃游戏
题目要求判断是否可以从数组第一个位置跳跃到最后一个位置,其中每个元素表示最大跳跃长度。解题思路采用动态规划方法,初始化一个布尔数组dp,dp[i]表示能否到达第i个位置。从起点开始遍历,若当前位置可达,则将其能跳跃范围内的位置标记为可达。最终检查最后一个位置是否被标记为可达即可。示例1输出true因为可以分两步跳到终点,示例2输出false因为会在下标3处卡住无法前进。该方法时间复杂度O(n^2),空间复杂度O(n)。
2026-05-03 13:19:50
411
原创 *【力扣hot100】 下一个排列
摘要:本文讨论如何找出整数数组的下一个字典序更大的排列。题目要求原地修改数组,仅使用常数空间。示例展示了不同输入对应的输出排列。作者最初直接使用STL的next_permutation函数实现,但指出后续需要重写更底层的解决方案。该算法在数组元素按降序排列时需返回最小字典序排列。
2026-05-02 12:55:50
311
原创 【力扣hot100】 494. 目标和
摘要:该题要求通过在非负整数数组每个元素前添加'+'或'-',构造表达式使其结果等于给定target。使用深度优先搜索(DFS)递归遍历所有可能的加减组合,当遍历完数组时检查当前和是否等于target并计数。示例解法通过维护当前和与当前位置进行递归,最终返回满足条件的表达式数目。该方法能处理数组长度1-20的情况,时间复杂度为O(2^n)。
2026-05-01 12:40:49
429
原创 *【力扣hot100】 4. 寻找两个正序数组的中位数
摘要:本文探讨了在两个有序数组nums1和nums2中寻找中位数的问题。作者首先采用暴力解法,将两个数组合并后排序,然后根据数组长度的奇偶性计算中位数。该方法时间复杂度为O((m+n)log(m+n)),虽然通过了测试用例,但未达到题目要求的O(log(m+n))时间复杂度。后续需要优化算法以满足性能要求。示例展示了输入[1,3]和[2]时输出2.0,输入[1,2]和[3,4]时输出2.5的情况。
2026-04-30 12:35:08
264
原创 【力扣hot100】 152. 乘积最大子数组
题目要求找出数组中乘积最大的非空连续子数组。关键思路是使用动态规划,维护当前的最大值(maxVal)和最小值(minVal),因为负数可能使最小值变为最大值。每次迭代时,maxVal取当前数、当前数乘maxVal或当前数乘minVal中的最大值,minVal同理取最小值。最终结果res始终跟踪maxVal的最大值。该方法避免了暴力枚举的高时间复杂度,能高效解决问题。示例输入[2,3,-2,4]输出6,即子数组[2,3]的乘积。时间复杂度O(n),空间复杂度O(1)。
2026-04-29 12:49:48
300
原创 【力扣hot100】105. 从前序与中序遍历序列构造二叉树
本文介绍如何根据二叉树的前序遍历(preorder)和中序遍历(inorder)序列重建二叉树。前序遍历的第一个元素是根节点,在中序遍历中找到该节点位置,即可确定左右子树的范围。通过递归处理左右子树的子数组,最终构建完整二叉树。示例展示了输入preorder=[3,9,20,15,7]和inorder=[9,3,15,20,7]时,输出为[3,9,20,null,null,15,7]的二叉树结构。该解法时间复杂度为O(n^2),适用于不含重复元素的遍历序列。
2026-04-28 11:03:13
306
原创 【力扣hot100】 20. 有效的括号
本文介绍了一个判断括号字符串有效性的算法。使用栈数据结构,遍历字符串时遇到左括号入栈,遇到右括号则检查栈顶是否为匹配的左括号。若不匹配或遍历结束后栈非空则返回false,否则返回true。算法时间复杂度为O(n),空间复杂度为O(n),能正确处理嵌套和并列的括号组合。
2026-04-27 11:29:15
282
原创 【力扣hot100】 34. 在排序数组中查找元素的第一个和最后一个位置
摘要:本文探讨了在非递减数组中查找目标值起始和结束位置的问题。通过分析二分查找算法,提出了两种解决方案:第一种尝试在找到目标值后线性扩展查找范围,但时间复杂度不达标;第二种采用两次二分查找分别定位左右边界,确保O(logn)时间复杂度。最终实现的解法通过独立查找左右端点,有效解决了该问题,并通过示例验证了正确性。
2026-04-25 12:17:46
316
原创 【力扣hot100】 416. 分割等和子集
摘要:该问题要求判断一个正整数数组是否能被分割成两个和相等的子集。解题思路是首先计算数组总和,若为奇数则直接返回false。若为偶数,则转化为寻找子集使其和等于总和的一半。通过动态规划方法,创建布尔数组dp,其中dp[j]表示是否存在子集的和为j。外层遍历数组元素,内层逆向更新dp数组。最终返回dp[sum/2]的值即为答案。该方法时间复杂度为O(n*target),空间复杂度为O(target),其中n为数组长度,target为总和的一半。
2026-04-24 13:24:35
312
原创 【力扣hot100】 76. 最小覆盖子串
这篇文章讨论了如何解决字符串中的最小覆盖子串问题。给定字符串s和t,要求找到s中最短的子串,使其包含t中所有字符(包括重复字符)。文章首先通过示例说明了问题要求,然后分析了滑动窗口算法的思路:使用右指针扩展窗口直到满足t的所有字符需求,再用左指针收缩窗口寻找最小子串。作者尝试了自己的解法但遇到困难,最终参考了标准解法,使用哈希表统计字符频率,通过双指针动态维护窗口范围。该算法的时间复杂度为O(m+n),其中m和n分别是s和t的长度。文章提供了详细的代码实现,并解释了关键步骤的逻辑。
2026-04-23 13:24:16
332
原创 【力扣hot100】 438. 找到字符串中所有字母异位词
本文介绍了一种使用滑动窗口算法查找字符串中所有异位词子串起始索引的方法。通过维护两个哈希表need和win分别记录目标字符串p的字符频率和当前窗口字符频率,算法使用双指针left和right控制窗口滑动。当窗口大小等于p长度时,检查字符频率是否匹配,匹配则记录起始索引。窗口右移时更新字符计数,左移时恢复计数。该方法时间复杂度为O(n),空间复杂度为O(1),适用于处理小写字母组成的字符串。示例演示了算法对输入"cbaebabacd"和"abab"的处理过程。
2026-04-22 13:42:14
320
原创 【力扣hot100】 98. 验证二叉搜索树
题目要求判断给定二叉树是否为有效的二叉搜索树。有效二叉搜索树的定义是:左子树所有节点值必须小于当前节点,右子树所有节点值必须大于当前节点,且左右子树本身也必须是二叉搜索树。解题思路采用深度优先搜索(DFS),通过传递当前节点的值范围进行验证:遍历左子树时更新最大值上限为当前节点值,遍历右子树时更新最小值下限为当前节点值。若节点值超出范围则返回false,空节点返回true。最终通过递归调用完成整棵树的验证。
2026-04-21 13:15:02
396
原创 【力扣hot100】 322. 零钱兑换
这篇文章探讨了使用动态规划解决硬币找零问题。给定不同面额的硬币和总金额,目标是找出组成该金额所需的最少硬币数量。通过构建一个动态规划数组dp,其中dp[i]表示组成金额i所需的最小硬币数。算法从1元遍历到目标金额,对每个金额尝试所有硬币面额,更新最小硬币数。最终返回结果时,若dp[amount]仍大于初始值,则说明无解。该方法有效解决了硬币组合问题,时间复杂度为O(amount * n),其中n为硬币种类数。
2026-04-20 12:49:37
329
原创 QML加载页面方案总结(附屏幕中心加载)
本文总结了两种QML页面加载切换方法:1)Loader切换法,通过销毁原页面创建新页面实现完全切换,适用于登录转主界面等场景,需配合信号机制控制切换;2)visible属性切换法,通过隐藏/显示组件实现快速切换并保留页面状态,适用于注册/登录等需要保存输入内容的场景。两种方法各有特点,可根据具体需求选择使用,后续将根据项目经验继续补充完善。
2026-04-19 12:10:51
1155
原创 【力扣hot100】 19. 删除链表的倒数第 N 个结点
本文介绍了如何删除链表倒数第n个节点的算法。采用快慢指针法:先让快指针移动n+1步,再与慢指针同步移动,当快指针到达末尾时,慢指针正好指向待删除节点的前驱。使用虚拟头节点简化边界条件处理,最终实现时间复杂度O(L)(L为链表长度)的解决方案。示例代码展示了具体实现过程,包括链表遍历和节点删除操作。该方法满足题目要求,且只需一次遍历即可完成。
2026-04-18 13:23:08
380
原创 【力扣hot100】 239. 滑动窗口最大值
本文介绍了解决滑动窗口最大值问题的两种方法。首先使用暴力解法(时间复杂度O(nk))会导致超时,然后提出了基于单调队列的优化方案。该方案维护一个单调递减的双端队列,通过检查队首元素是否过期并删除队尾较小元素,保证队列始终存储当前窗口内的潜在最大值。优化后的算法时间复杂度为O(n),能够高效处理大规模数据。代码实现展示了如何利用双端队列动态维护窗口最大值,并通过测试用例验证了其正确性。
2026-04-16 12:56:03
356
原创 【力扣hot100】 79. 单词搜索
摘要:本文解决了一个在二维字符网格中搜索单词的问题。给定m×n的字符网格board和字符串word,判断word是否可以通过相邻单元格(水平或垂直)的字母顺序连接构成,且同一单元格不可重复使用。采用深度优先搜索(DFS)算法,从每个与word首字母匹配的位置开始搜索,使用访问标记数组vis防止重复访问。当找到完整单词时将结果置为true。时间复杂度较高,但可通过剪枝优化,如提前终止已找到解的分支。该解法适用于小规模网格,对更大网格需进一步优化。
2026-04-15 12:33:05
384
原创 *【力扣hot100】 128. 最长连续序列
本文探讨了如何寻找未排序整数数组中最长连续数字序列的长度问题。作者提出了一种基于集合(set)的解决方案:首先利用set去重并排序数组元素,然后转换为vector进行遍历。算法通过检查当前元素是否与前一个元素连续来计数,记录最大连续序列长度。虽然当前实现时间复杂度为O(nlogn),但作者计划进一步优化至O(n)。代码示例展示了具体实现,包括处理空数组、遍历计数和提前终止等优化策略。
2026-04-14 13:07:03
378
原创 【力扣hot100】 84. 柱状图中最大的矩形
摘要:本文探讨柱状图中最大矩形面积问题,给定n个柱子高度,求能勾勒出的最大矩形面积。使用单调栈算法,在遍历时维护一个单调递增栈,遇到较小高度时计算前面柱子的最大面积。关键点在于处理栈中元素时确定左右边界,并通过在数组末尾添加0来确保所有柱子都被处理。算法时间复杂度为O(n),适用于大规模数据。示例输入[2,1,5,6,2,3]输出10,对应红色区域面积。
2026-04-13 13:15:46
372
原创 【力扣hot100】 560. 和为 K 的子数组
本文探讨了统计整数数组中连续子数组和等于给定值k的个数问题。作者最初采用暴力前缀和方法,但出现内存限制问题。优化后使用哈希表存储前缀和,通过遍历数组时计算当前前缀和sum,并在哈希表中查找sum-k的出现次数来统计符合条件的子数组个数。最终方案时间复杂度为O(n),空间复杂度为O(n),有效解决了原问题。
2026-04-12 09:39:33
413
原创 【力扣hot100】 1. 两数之和
摘要:本文提出了一种双指针方法解决"两数之和"问题。先将数组元素与原始下标存储为pair类型并排序,然后使用左右指针遍历数组:当两数之和小于目标值时左指针右移,大于时右指针左移,相等时返回对应下标。该方法时间复杂度优于暴力解法,示例代码展示了C++实现过程。
2026-04-11 22:13:59
361
原创 【力扣hot100】 56. 合并区间
本文介绍了一个合并重叠区间的算法。首先将区间数组按起始点排序,初始化结果数组为第一个区间。然后遍历后续区间:若当前区间与结果数组最后一个区间重叠且右端点更大,则合并;若不重叠则直接加入结果数组。该方法时间复杂度主要取决于排序步骤,为O(nlogn),空间复杂度O(n)。示例展示了算法对[[1,3],[2,6]]等输入的处理过程,正确输出合并后的非重叠区间数组。
2026-04-10 14:16:37
656
原创 【力扣hot100】 2. 两数相加
题目要求将两个逆序存储数字的链表相加,返回相同形式的和链表。解题思路是递归处理:每次递归计算当前节点的和及进位,直到链表都为空且进位为0。初始暴力解法将链表转为数字相加再转回链表,但存在溢出问题。正确解法通过递归逐位相加,维护进位值,避免了数值转换。时间复杂度O(max(m,n)),空间复杂度O(max(m,n)),其中m,n为链表长度。示例展示了不同长度链表相加及进位处理的情况。
2026-04-09 13:56:49
424
原创 【力扣hot100】 3. 无重复字符的最长子串
本文解决字符串中无重复字符的最长子串长度问题。采用滑动窗口法,维护左右指针left和right,用哈希表记录字符最后出现位置。当遇到重复字符时,left更新为max(left,重复字符上次位置+1),防止回退。每次迭代更新字符位置和最大长度,时间复杂度O(n)。示例表明该方法能正确处理"abcabcbb"、"bbbbb"等测试用例。
2026-04-08 15:44:01
402
原创 【力扣hot100】 148. 排序链表
本文提出了一种使用map结构对链表进行排序的解法。通过遍历链表将节点值存入map(自动按key升序排列),再利用map的有序性重新构建链表。该方法时间复杂度为O(nlogn),空间复杂度O(n),适用于节点值范围在[-10^5,10^5]且长度不超过5*10^4的链表。核心步骤包括:1)遍历链表统计节点值出现次数;2)按map顺序创建新节点;3)使用虚拟头节点简化链表重建过程。该解法思路直观,但可能存在优化空间。
2026-04-07 13:52:28
586
原创 【力扣hot100】 5. 最长回文子串
本文介绍了寻找字符串中最长回文子串的算法。采用滑动窗口方法,通过左右指针从字符串两端向中间遍历,检查子串是否为回文。算法进行了多处剪枝优化:当窗口长度小于已知最长回文时提前终止,字符不匹配时立即跳出循环。时间复杂度为O(n^3),空间复杂度O(1)。该方法直观易懂,适用于中等长度字符串,但对于超长字符串可能需要更优算法。
2026-04-06 13:56:31
405
原创 【力扣hot100】 15. 三数之和
本文探讨了如何找出数组中所有和为0且不重复的三元组。作者最初采用三重循环暴力解法,但遇到性能问题。随后改用双指针优化方案:先排序数组,固定一个元素后,使用左右指针寻找符合条件的组合。当和大于0时右指针左移,小于0时左指针右移,等于0时记录结果并用set去重。最终方案通过排序+双指针将时间复杂度从O(n³)优化到O(n²),有效解决了原问题。
2026-04-05 13:30:40
842
原创 *【力扣hot100】 53. 最大子数组和
本文介绍了求解最大子数组和问题的动态规划解法。题目要求在给定整数数组中找出和最大的连续子数组。解法使用动态规划思想,定义dp[i]表示以nums[i]结尾的最大子数组和,通过比较"延续前序子数组"和"从当前元素重新开始"两种情况来更新dp值。算法时间复杂度为O(n),空间复杂度为O(n)。示例代码展示了具体实现过程,通过遍历数组并维护当前最大值来求解问题。
2026-04-03 14:11:46
620
原创 【力扣hot100】 198. 打家劫舍
本文解决房屋盗窃问题,要求在不相邻房屋的情况下获得最大金额。采用动态规划方法,通过维护dp数组记录到每间房时的最大金额。初始处理前两间房后,从第三间开始,每间房的最大金额为前i-2间中最大值加上当前金额。最终返回dp数组中的最大值。时间复杂度O(n²),空间复杂度O(n)。示例显示该方法能正确计算最优解,如输入[2,7,9,3,1]输出12。
2026-04-02 13:37:50
405
原创 【力扣hot100】 70. 爬楼梯
本文介绍了一个经典的爬楼梯问题:每次可爬1或2个台阶,求n阶楼梯的不同爬法数。通过动态规划解决,将问题分解为子问题:爬到第n阶的方法数等于n-1阶和n-2阶方法数之和。给出了C++实现代码,使用数组存储中间结果,时间复杂度O(n),空间复杂度O(n)。示例展示了n=2时有2种方法,n=3时有3种方法。该解法适用于1≤n≤45的情况。
2026-04-01 22:25:10
444
原创 【力扣hot100】 146. LRU 缓存
本文实现了一个LRU缓存数据结构,通过双向链表和哈希表结合的方式达到O(1)时间复杂度。主要思路是:使用双向链表存储键值对以维护访问顺序,哈希表存储键到链表迭代器的映射。当访问(get)元素时,将该元素移到链表头部;当插入(put)元素时,若容量已满则删除链表尾部元素,并将新元素插入头部。这种设计确保了最近使用的元素保持在链表头部,最久未使用的在尾部,实现了LRU缓存的特性。代码实现中,get和put操作都严格保证了O(1)的时间复杂度。
2026-03-31 13:59:33
413
原创 【力扣hot100】 141. 环形链表
本文介绍了判断链表是否存在环的算法。采用快慢指针法,慢指针每次移动一步,快指针每次移动两步。若两指针相遇则说明有环,否则无环。该方法时间复杂度为O(n),空间复杂度为O(1)。代码实现中,首先处理空链表情况,然后初始化快慢指针,在循环中移动指针并检查是否相遇。该算法高效且节省内存,是解决链表环检测问题的经典方案。
2026-03-30 12:32:24
404
原创 C++中 friend 与 static 成员函数的实际应用解析
本文通过实例解析C++中友元函数和静态成员函数的实际应用。在友元函数部分,展示了ClassA通过声明ClassB为友元类,使其能够访问私有成员的过程,并强调了避免循环依赖的注意事项。静态成员函数部分以Math类为例,说明静态函数属于类级别行为,不能直接访问非静态成员变量,因其缺乏this指针。文章最后指出这些知识点来自实际项目经验,后续将根据遇到的问题继续补充完善。全文通过代码示例和关键注释,清晰呈现了这两项特性的使用场景和注意事项。
2026-03-29 15:50:56
1204
原创 【力扣hot100】 234. 回文链表
摘要:本文给出了判断单链表是否为回文链表的解法。通过遍历链表将节点值存入数组,然后使用双指针法比较数组首尾元素是否对称。该方法时间复杂度为O(n),空间复杂度为O(n)。示例表明该方法能正确判断[1,2,2,1]为回文链表,而[1,2]不是。文末提到可通过优化实现O(1)空间复杂度。
2026-03-28 18:45:53
400
原创 【力扣hot100】 240. 搜索二维矩阵 II
本文提出了一种在有序二维矩阵中高效搜索目标值的算法。该矩阵具有每行从左到右、每列从上到下递增的特性。算法采用双重循环遍历:外层遍历行,内层遍历列,当发现当前元素大于目标值而前一个元素小于目标值时,记录该列位置作为后续遍历的上界。这种方法通过动态缩小搜索范围优化性能,时间复杂度为O(m+n)。示例验证表明算法能正确判断目标值是否存在,适用于中等规模矩阵的搜索需求。
2026-03-27 14:51:35
405
原创 【力扣hot100】 155. 最小栈
本文实现了一个支持常数时间获取最小值的栈(MinStack)。通过维护两个栈:主栈存储所有元素,辅助栈(单调栈)存储当前最小值。push操作时,若新元素≤辅助栈顶则入栈;pop操作时,若主栈顶等于辅助栈顶则同步弹出。top()和getMin()分别返回主栈顶和辅助栈顶元素,保证O(1)时间复杂度。示例演示了push(-2,0,-3)后getMin()返回-3,pop()后top()返回0,getMin()返回-2的过程。该方法通过空间换时间,确保所有操作高效执行。
2026-03-25 15:00:58
452
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅