自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析

已知一个长度为 `n` 的**旋转排序数组**(例如原数组 `[0,1,2,4,5,6,7]` 旋转后可能变为 `[4,5,6,7,0,1,2]`),要求以 `O(log n)` 的时间复杂度找到数组中的最小值。

2025-05-17 22:28:44 324

原创 LeetCode 33. 搜索旋转排序数组:二分查找的边界艺术

在旋转后的有序数组中搜索目标值。假设数组原本按升序排列,但在某个未知下标处进行了旋转(例如 `[0,1,2,4,5,6,7]` 旋转后可能变为 `[4,5,6,7,0,1,2]`)。要求时间复杂度为 **O(log n)**。

2025-05-17 22:07:21 261

原创 Java 常见数据结构操作详解:获取长度与删除元素

在后端开发及算法面试中,熟练掌握数据结构的基础操作(如获取长度、删除元素)是必备技能。本文通过 **代码示例** 和 **表格总结** ,详细讲解 Java 中常用数据结构的相关操作,帮助开发者快速掌握核心知识点。

2025-05-17 11:34:45 154

原创 用Java实现单词搜索(LeetCode 79)——回溯算法详解

给定一个 `m x n` 的二维字符网格 `board` 和一个字符串 `word`,要求判断 `word` 是否存在于网格中。单词必须通过**相邻单元格内的字母按顺序连接形成**,其中“相邻”单元格指的是水平或垂直相邻的单元格。同一个单元格内的字母**不允许被重复使用**。

2025-05-17 09:45:00 576

原创 使用回溯算法生成有效括号组合的实现详解LeetCode22

**括号生成问题**要求生成所有由 `n` 对有效括号组成的字符串组合。例如,当 `n = 3` 时,可能的组合包括 `"((()))"`, `"(()())"`, `"()(())"`, `"()()()"` 等。有效括号需满足以下条件:- 每个左括号必须有对应的右括号。- 括号顺序必须正确(例如 `")("` 是无效的)。

2025-05-17 08:00:00 691

原创 解决LeetCode 47. 全排列 II 问题的正确姿势:深入分析剪枝与状态跟踪

给定一个可能包含重复元素的整数数组 `nums`,返回所有可能的唯一全排列。例如,输入 `nums = [1,1,2]`,期望输出为: `[[1,1,2], [1,2,1], [2,1,1]]`。

2025-05-16 19:36:41 496

原创 Java回溯算法解决非递减子序列问题(LeetCode 491)的深度解析

给定一个整数数组 nums,要求找出所有不同的非递减子序列,子序列至少包含两个元素。原代码存在两个主要问题:非递减条件错误和缺少去重逻辑

2025-05-16 17:35:55 800

原创 LeetCode 39 & LeetCode 40 组合总和问题详解:回溯算法与剪枝优化(Java实现)

本文解析了组合总和问题的两个变体:组合总和I和组合总和II。组合总和I要求从无重复元素的数组中找到和等于目标的组合,允许重复使用元素;组合总和II则针对可能包含重复元素的数组,且每个元素在每个组合中只能使用一次。通过回溯算法,结合排序剪枝和去重处理,可以有效解决这两个问题。文章详细介绍了代码实现、复杂度分析及关键点解析,帮助读者理解剪枝与去重的原理,并提供了常见问题的解答,便于举一反三处理类似问题。

2025-05-10 17:45:02 641

原创 LeetCode 216.组合总和 III:回溯算法实现与剪枝优化

回溯法的适用性:适合解决组合、排列、子集等问题,通过递归和剪枝平衡效率。剪枝优化的重要性:合理剪枝可以显著减少无效递归路径。扩展问题组合总和 I(数字可重复使用)组合总和 II(包含重复数字但不可重复使用)核心收获:通过升序选择数字避免重复,通过预计算最大起始值减少无效遍历。

2025-05-08 18:07:21 347

原创 LeetCode77. 组合问题详解:Java回溯算法+剪枝优化实现

核心技巧:回溯算法的路径管理 + 数学剪枝。相似题目LeetCode39. 组合总和LeetCode46. 全排列练习建议:尝试修改代码输出含重复元素的组合(如LeetCode40. 组合总和 II。

2025-05-08 14:40:59 802

原创 如何高效实现「LeetCode25. K 个一组翻转链表」?Java 详细解决方案

通过虚拟头节点、指针定位和分组断链,本方案高效实现了链表的每k个节点翻转。代码逻辑清晰,时间复杂度为线性,适合处理大规模链表数据。

2025-05-07 17:56:13 476

原创 LeetCode21.合并有序链表全解析:从两链表到K链表的算法优化

合并两个链表时优先使用迭代法保证稳定性递归法可用于代码简洁性优先的场景合并K个链表时默认使用分治法(LeetCode官方推荐解法)当K较小时(如K≤10),优先队列法更易实现注意事项始终检查输入链表数组为空的情况处理链表节点时注意断链操作附录:LeetCode测试用例验证空链表输入单链表输入超长链表(10^4级别节点)大规模链表数(K=10^4)掌握这些核心方法,将能从容应对绝大多数链表合并相关的算法挑战!

2025-05-07 08:00:00 1002

原创 LeetCode 148. 排序链表:归并排序的细节解析

均匀分割的重要性:确保递归深度为O(log n),避免时间复杂度退化。快慢指针的初始化细节保证了链表被均匀分割,尤其是在链表长度为偶数时。归并排序的优势:适合链表的顺序访问特性,合并操作无需额外空间(仅需修改指针)。通过正确实现快慢指针的分割逻辑,归并排序能够高效解决链表的排序问题,满足题目对时间复杂度和空间复杂度的要求。

2025-05-07 08:00:00 263

原创 LeetCode 54.螺旋矩阵遍历的两种方法详解与对比

边界调整法适合实际应用场景,尤其是大规模矩阵遍历。通过逐层收缩边界,时间和空间复杂度均最优。矩阵旋转法适合理解螺旋遍历的逻辑本质,但时间和空间开销较大,仅推荐在小规模数据或教学场景使用。两种方法各有优劣,开发者可根据具体需求选择实现方式。若追求性能,优先选择边界调整法;若需快速验证逻辑,可尝试矩阵旋转法。

2025-05-06 18:36:43 302

原创 深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比

尽管题目名称相似,但它们的矩阵排序规则和解题思路存在显著差异。本文将从问题本质出发,对比两种解法的核心思想、适用场景及实现细节,帮助读者深入理解并灵活应对类似问题。通过深入理解矩阵的排序规则与算法特性,读者可以灵活选择最优解法,轻松应对二维矩阵搜索问题。无论是面试还是实际工程应用,清晰的思路和高效的代码实现都是解决问题的关键。(O(\log(m \times n))),其中 (m) 为行数,(n) 为列数。(O(m + n)),其中 (m) 为行数,(n) 为列数。

2025-05-06 17:10:41 1516

原创 LeetCode 239. 滑动窗口最大值(Java)——双端队列高效解法

通过双端队列维护单调性,我们能够高效地解决滑动窗口最大值问题。该方法的核心在于利用队列的单调性减少不必要的比较,从而将时间复杂度优化至O(n)。理解队列维护的条件(何时移除元素)是掌握此算法的关键。

2025-05-06 08:00:00 724

原创 经典算法实战:环形链表的检测、入口定位与重复数查找(LeetCode 141, 142, 287)

环形链表问题是数据结构与算法中的经典问题,常见于面试与竞赛场景。本文通过**快慢指针法**(Floyd判圈算法)深入解析以下三个问题

2025-05-06 08:00:00 920

原创 41.寻找缺失的第一个正数:原地哈希算法详解

原地哈希算法通过索引映射和元素交换,将时间复杂度优化至O(n),空间复杂度优化至O(1)。该方法不仅高效,还能帮助深入理解数组索引与数值之间的关系。掌握这一算法,可轻松应对类似的高频面试题。

2025-05-05 14:39:23 469

原创 LeetCode 238:除自身以外数组的乘积(Java实现)

通过两次遍历分别计算左右两侧的乘积,既避免了除法,又优化了空间复杂度。该方法适用于需要前后缀计算的场景(如“接雨水”问题)。关键在于分步拆解问题,复用结果数组减少空间占用。

2025-05-05 14:14:30 850

原创 原地轮转数组的两种高效实现详解

临时数组法优点:逻辑直观,代码简单。缺点:需额外空间存储k个元素。三次反转法优点:原地操作,空间最优。缺点:需熟悉反转逻辑,索引处理需谨慎。根据实际场景选择合适的方法,若内存允许且追求代码简洁性,可选用临时数组法;若需严格原地操作,三次反转法是更优选择。

2025-05-02 18:17:53 705

原创 Java实现区间合并算法详解

排序是核心:排序后,只需线性遍历即可合并相邻重叠区间。合并逻辑:比较当前区间与合并列表最后一个区间,动态更新结束点。Java类型转换:通过toArray指定返回数组类型,避免类型安全问题。扩展思考:如果输入区间已经按起始点排序,如何优化算法?此时时间复杂度可降至O(n)!

2025-05-02 17:02:29 430

原创 最大子数组和问题:两种Kadane算法实现对比与优化详解

算法选择:Kadane算法是解决最大子数组和问题的最优解实现差异显式条件分支更易理解算法本质Math.max实现更简洁优雅工程实践优先使用标准Math.max实现注意变量命名的语义化避免冗余的边界检查。

2025-05-02 16:19:52 503

原创 LeetCode 560. 和为 K 的子数组 | 前缀和与哈希表的巧妙应用

前缀和与哈希表的结合是解决子数组和问题的经典方法,适用于大规模数据。初始化哈希表为{0:1}是关键,确保能正确统计到从数组起始位置开始的子数组。通过空间换时间,将时间复杂度从 O(n²) 优化到 O(n)。

2025-05-02 15:12:23 528

原创 LeetCode路径总和系列问题解析:I、II、III的解决方案与优化

问题核心方法时间复杂度空间复杂度关键难点路径总和 I递归遍历O(n)O(n)终止条件判断路径总和 II回溯+路径记录O(n)O(n²)深拷贝与回溯逻辑路径总和 III前缀和+哈希表O(n)O(n)前缀和统计与回溯维护路径总和I:基础递归应用,理解终止条件与递归分解。路径总和II:掌握回溯法维护路径状态,注意深拷贝避免引用问题。路径总和III:前缀和优化是核心,通过空间换时间避免重复计算。

2025-04-30 16:43:26 658

原创 从遍历序列构造二叉树:前序+中序与中序+后序的递归解法详解

核心共性通过根节点分割中序序列,确定左右子树的区间。递归处理左右子树时,需精准计算前序或后序序列的子树区间。关键区别根节点位置:前序序列首元素 vs. 后序序列末元素。区间计算:前序需跳过根节点后分割,后序需排除末元素后分割。扩展思考如何验证构建的二叉树是否正确?重新生成前序/中序/后序遍历序列,与原输入比对。如果遍历序列中存在重复值,上述方法是否有效?无效,因为哈希表无法唯一确定根节点位置。题目链接105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树。

2025-04-29 18:50:15 744

原创 如何将二叉树展开为链表?两种Java实现方法对比

通过修改指针实现原地展开,无需额外空间。类似Morris遍历,时间复杂度O(n),空间复杂度O(1)。:显式存储前序遍历结果,再重建链表。时间复杂度O(n),空间复杂度O(n)。的顺序展开为一个单链表。给定一棵二叉树的根节点 `root``,要求将其按。

2025-04-29 16:57:47 675

原创 链表反转操作经典问题详解

反转链表:迭代法(O(1) 空间)和递归法(O(n) 空间)各有适用场景。回文链表:结合快慢指针和反转链表,实现 O(1) 空间复杂度。区间反转:通过哑节点和精准定位,高效处理子链表反转。核心技巧双指针法(快慢指针、前后指针)哑节点简化边界条件递归与回溯的灵活应用通过练习这些经典问题,可以深入掌握链表操作的核心逻辑!

2025-04-29 16:00:10 728

原创 链表相交节点与最小索引和问题的解法详解

相交链表问题:通过双指针法消除长度差异,实现高效相遇检测。最小索引和问题:利用哈希表快速查找共同元素,动态维护最小索引和。核心思想:双指针法适用于链表遍历问题,哈希表适用于快速查找和索引维护。

2025-04-29 12:34:35 717

原创 二叉搜索树中第 K 小的元素:两种方法详解(递归与迭代)

特性递归实现迭代实现代码简洁性更简洁,无需显式栈操作需要手动维护栈结构空间风险树高度较大时可能栈溢出显式栈更稳定适用场景树高度较小或 k 较小树高度较大或需要避免递归风险推荐选择若对代码简洁性要求高且树高度可控,优先选择递归。若树高度较大或需要严格避免栈溢出风险,选择迭代实现。

2025-04-29 08:00:00 519

原创 将有序数组转换为高度平衡二叉搜索树 | 详解与Java实现

核心思路:分治法选择中间节点递归构建BST。关键技巧:使用避免溢出。性能保证:时间复杂度 O(n),空间复杂度 O(log n)。适用场景:有序数组转平衡BST、二分查找相关算法。通过这种方法,可以高效地将有序数组转换为高度平衡的二叉搜索树,满足算法题和实际工程的需求。

2025-04-28 17:17:02 1224

原创 如何验证二叉搜索树(BST):Java实现详解

递归上下界:直接通过范围约束检查,适合小规模数据。中序遍历迭代:避免递归栈溢出,适合大规模或深度较大的树。中序遍历递归:代码简洁,但需注意实例变量管理。根据实际场景选择合适的方法,确保高效性和代码可维护性。

2025-04-28 16:14:03 672

原创 二叉树最近公共祖先问题的Java实现与优化

基础递归:简单直观,适合理解问题本质。优化方法提前终止:减少冗余遍历,提升效率。布尔返回:简化逻辑,降低内存开销。迭代法:避免栈溢出,适用于深度较大的树。实际应用:根据树的结构选择合适方法,平衡树优先用递归,深树用迭代法。通过以上方法,可以灵活应对不同场景下的 LCA 问题,提升代码的效率和鲁棒性。

2025-04-28 12:01:04 909

原创 二叉树的右视图:BFS与DFS方法详解

二叉树的右视图:BFS与DFS方法详解

2025-04-28 11:53:54 781

原创 二叉树层序遍历技术解析与面试指南

层序遍历(Level Order Traversal)是一种**广度优先搜索(BFS)**算法,按层级从上到下、从左到右访问二叉树节点。通过掌握层序遍历的核心原理与扩展应用,可以更从容地应对树结构相关的问题,展现系统级的算法设计能力。

2025-04-22 22:59:52 829

原创 Java队列(Queue)核心操作与最佳实践:深入解析与面试指南

队列(Queue)是计算机科学中最重要的线性数据结构之一,遵循**先进先出(FIFO)**原则。在Java生态中,队列不仅是算法题(如BFS、缓存管理)的核心工具,更是高并发系统、消息中间件等企业级架构的基石。本文将深入剖析Java队列的实现原理、核心API、性能差异及实战技巧,助力开发者掌握面试高频考点,写出高性能队列代码。核心原则:优先使用ArrayDeque,需要双端操作时选择LinkedListAPI规范:始终使用系列方法扩展方向研究阻塞队列(BlockingQueue)实现原理。

2025-04-22 22:51:32 617

原创 面试常问的扫码登录场景题:从原理到实现全解析

扫码登录的面试回答需抓住流程拆解、状态机设计、安全防护三大核心,结合Redis、JWT等关键词展示技术深度。代码健壮性:处理Token过期、重复提交等边界场景;可观测性:监控扫码成功率、延迟等指标;扩展性:设计支持横向扩展的Token管理方案。更多面试技术解析,欢迎访问作者主页查看系列文章。

2025-04-17 23:27:15 815

原创 滑动窗口+哈希表:最长无重复子串的最优解与高频面试题解析

在 LeetCode 和各大厂算法面试中,“寻找字符串中最长无重复字符子串”是一道经典高频题。它不仅考察对**滑动窗口**和**哈希表**的灵活运用,还能延伸出对时间复杂度优化、边界条件处理的深度思考。本文将通过两种 Java 实现(**求长度**和**求子串本身**),结合代码逐行解析

2025-04-17 08:30:00 648

原创 MySQL 中 `${}` 和 `#{}` 占位符详解及面试高频考点

在 MySQL 和 MyBatis 等框架中,${}和#{}是动态 SQL 中常用的占位符。它们的核心差异在于预编译机制和安全性,正确使用二者是后端开发的基本功,也是面试中的高频考点。本文将从原理、场景、安全性及面试题四方面深入解析。#{}用于替换值类型(如 WHERE 条件值、INSERT 字段值),通过预编译,防止 SQL 注入。${}用于替换标识符(如表名、列名、ORDER BY 子句),直接拼接字符串,需手动校验安全性。场景占位符示例WHERE 条件值#{}动态表名/列名${}

2025-04-16 19:29:09 970

原创 Java字符串操作全解析:语法、示例与应用场景

在Java算法题和日常开发中,字符串处理是必备的核心技能。本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字符串处理技巧,轻松应对笔试面试高频题目。

2025-04-16 09:45:00 4861 8

原创 经典算法问题解析:两数之和与三数之和的Java实现

在算法面试和编程练习中,**两数之和(Two Sum)**和**三数之和(3Sum)**是两个经典的数组处理问题。这两个问题不仅是检验基础算法能力的试金石,也是理解高效搜索技巧的重要案例。本文将通过Java代码实现这两个问题,并深入解析其优化思路。

2025-04-15 21:52:47 1076

三级数据库无纸化考试模拟软件.rar

一个计算机三级数据库的模拟软件,上传于此是为了个人备份

2019-08-29

空空如也

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

TA关注的人

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