- 博客(493)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 【算法训练营Day22】回溯算法part4
本文总结了三道回溯算法题目:非递减子序列、全排列和全排列II的解题思路。对于非递减子序列问题,在子集基础上增加了非递减和长度限制条件,使用哈希表去重;全排列问题通过集合或标记数组跟踪已使用元素;全排列II则需额外处理重复元素,通过排序和标记数组实现去重。文章归纳了两种常见去重方法:有序数组的元素比较和无序数组的哈希表记录,并指出回溯算法适用于组合、排列、切割、子集和棋盘等问题,强调将问题抽象为树形结构是解题关键。
2025-08-07 23:06:31
641
原创 【算法训练营Day21】回溯算法part3
本文介绍了四道与回溯算法相关的题目解法: 分割回文串:通过递归切割字符串,判断子串是否为回文,收集所有可能的分割方案。 复原IP地址:固定切割成四部分,验证每部分是否合法IP段,收集有效IP组合。 子集问题:类似组合问题但无数量限制,递归收集所有子集(包括空集)。 子集II:在子集基础上增加去重逻辑,需先排序再跳过重复元素。 这些题目都采用回溯算法框架,通过递归探索所有可能性,配合剪枝条件优化效率。关键区别在于问题约束条件不同:回文串需验证回文性,IP地址有格式限制,子集问题则需处理重复元素。
2025-08-06 21:02:54
409
原创 【算法训练营Day19&20】回溯算法part1&2
回溯算法理论基础 回溯算法是一种通过穷举搜索解决问题的算法,其核心思想是递归和回溯。适用于组合、切割、子集、排列、棋盘等问题。回溯问题可抽象为树形结构,集合大小决定树的宽度,递归深度决定树的高度。算法模板包含终止条件、循环递归和回溯撤销三步。 组合问题 组合问题要求从N个数中选出k个数的集合。通过递归控制嵌套层数,使用startIndex避免重复组合。剪枝优化可减少无效搜索,如限制i的范围为n-(k-item.size())+1。 组合总和III 在1-9中找出k个数使其和为n。与组合问题类似,但增加了和的
2025-08-05 14:40:05
696
原创 【算法训练营Day18】二叉树part8
本文介绍了二叉搜索树的三种操作:修剪、构建和累加。修剪二叉搜索树时,通过递归方式删除不在指定范围的节点,保留有效子树。将有序数组转换为平衡二叉搜索树时,采用二分法递归构建左右子树。将二叉搜索树转换为累加树时,通过翻转树进行反向中序遍历实现节点值的累加。每种操作都提供了对应的Java代码实现,展示了二叉搜索树在不同场景下的处理方法。
2025-07-29 20:06:05
347
原创 【算法训练营Day17】二叉树part7
二叉树与二叉搜索树操作摘要 本文介绍了二叉树和二叉搜索树中的四种常见操作: 二叉树的最近公共祖先:采用后序遍历递归方法,通过判断子树是否包含目标节点来定位最近公共祖先,时间复杂度O(n)。 二叉搜索树的最近公共祖先:利用二叉搜索树特性,从上往下遍历,根据节点值大小关系确定搜索方向,时间复杂度O(h)。 二叉搜索树插入操作:按照二叉搜索树规则,递归地在合适位置插入新节点,保持树结构性质。 二叉搜索树删除操作:处理三种情况: 叶子节点直接删除 单子树节点用子树替代 双子树节点用前驱/后继替代并递归删除 这些算法
2025-07-28 20:51:02
919
原创 【算法训练营Day15&16】二叉树part5&6
我们可以通过先构建左右子树再拼接上根节点的方式来构建二叉树,所以我们选用后序遍历。解题逻辑:本题较为简单,直接比较节点值与搜索值,节点值比搜索值大,则往左递归查询,反之向右递归查询。他还有一个非常重要的特性就是其中序遍历是单调递增的,那么凭借这个特性我们就可以建立初步的思路。很相似,都是通过切割数组完成二叉树的构建,但这题稍微简单一些。很容易错误理解为根节点大于左节点,小于右节点。
2025-07-20 19:53:40
291
原创 【算法训练营Day14】二叉树part4
本文总结了二叉树相关的三个算法题解: 找树左下角的值:通过层序遍历获取最后一层的第一个节点值。 路径总和问题: 基础版判断是否存在路径和等于目标值,优化为遇到符合条件路径立即返回。 进阶版需要记录所有路径和等于目标值的路径,通过回溯遍历整棵树。 从中序与后序遍历序列构造二叉树:利用中序和后序序列特性递归重建二叉树,关键是根据后序确定根节点,再分割中序序列。 文中还总结了递归函数返回值的使用场景:当需要搜索整棵树时可不返回值,需要处理返回值或提前终止搜索时需返回值。递归过程包含"递"和&q
2025-07-18 17:34:52
872
原创 【算法训练营Day13】二叉树part3
本文介绍了四个二叉树相关算法题的解题思路。关于平衡二叉树,通过修改求高度方法,用-1表示不平衡;二叉树路径问题采用前序遍历和回溯算法记录所有路径;左叶子之和同样使用前序遍历结合回溯;完全二叉树节点计数则直接遍历统计。四题均采用递归解法,关键点在于递归终止条件、参数传递和回溯处理。代码实现简洁,展现了递归在树问题中的典型应用。
2025-07-17 19:43:12
888
原创 【算法训练营Day12】二叉树part2
本文介绍了几个常见的二叉树相关算法题解。翻转二叉树采用层序遍历交换非叶节点的左右孩子;对称二叉树通过后序遍历比较左右子树的内外节点;最大深度通过递归计算根节点高度;最小深度则需特殊处理非叶子节点路径。这些解法都遵循递归的三要素:参数返回值、终止条件和单层逻辑,代码实现简洁高效。
2025-07-14 21:05:45
1004
原创 【算法训练营Day11】二叉树part1
二叉树理论基础与遍历方法 本文介绍了二叉树的基本概念和遍历方法。主要内容包括: 二叉树结构类型:满二叉树、完全二叉树、二叉搜索树和平衡二叉搜索树(AVL树) 存储方式: 顺序存储(数组) 链式存储(指针) 遍历方式: 深度优先遍历(前序、中序、后序) 广度优先遍历(层序) 递归遍历实现:详细讲解了前序、中序、后序三种递归遍历方法,并总结了递归算法的三要素 层序遍历应用:通过两道LeetCode题目(102.二叉树的层序遍历和199.二叉树的右视图)展示了层序遍历的实现方法及其变式应用 文章提供了完整的Jav
2025-07-10 16:28:47
887
原创 【算法训练营Day10】栈与队列part2
文章摘要: 本文解析了三道LeetCode算法题解法:1. 逆波兰表达式利用栈结构处理运算符和数字;2. 滑动窗口最大值采用单调队列维护递减序列;3. 前K个高频元素使用哈希表计数配合优先队列排序。每道题都包含解题思路、核心逻辑和Java代码实现,重点展示了栈、单调队列和优先队列在不同场景下的应用。代码实现注重边界条件处理和数据结构特性利用,如逆波兰表达式的栈操作顺序、单调队列的维护机制等。
2025-07-09 21:08:51
359
原创 【算法训练营Day09】栈与队列part1
本文介绍了Java中栈和队列的实现方式及相互转换。主要内容包括: Java中栈的实现推荐使用ArrayDeque或LinkedList替代过时的Stack类;双端队列Deque接口可同时实现栈和队列功能。 用栈实现队列的方法:使用两个栈,一个负责入队,另一个负责出队操作时临时存储元素。 用队列实现栈的方法:通过两个队列交替存储,确保每次操作时队列1只保留栈顶元素。 有效的括号算法:利用栈结构匹配开闭括号,遍历后检查栈是否为空来判断有效性。 删除相邻重复项算法:使用栈即时检测并消除相邻重复字符,最后拼接剩余字
2025-07-07 13:48:30
939
原创 【算法训练营Day08】字符串part2
本文总结了字符串处理中的双指针应用。通过三道典型题目,展示了双指针在不同场景下的解题思路:1)反转字符串单词使用头尾指针分离单词并栈式重组;2)右旋字符串通过定位分割点实现旋转;3)KMP算法利用双指针模式匹配。双指针法的核心在于将双重循环简化为单次遍历,常见形式包括双向逼近或同向移动。这种方法在处理线性结构(数组/链表/字符串)时十分高效。
2025-07-04 19:13:18
314
原创 【算法训练营Day07】字符串part1
本文总结了三个字符串处理问题及解法:1. 双指针反转字符串(344题);2. 间隔反转字符串II(541题),使用双指针按2k区间处理;3. 替换数字问题(54题),对比了简单拼接法与扩容后向处理法,后者更高效避免数据覆盖。核心思路均围绕指针操作和数组扩容技巧展开,着重处理边界情况。
2025-06-05 00:25:33
518
原创 【算法训练营Day06】哈希表part2
本文总结了四道哈希表与双指针相关算法题的解题思路: 四数相加II:通过分治思想,将四个数组分成两组分别求和,利用哈希表记录前两组和的频次,再在后两组中查找互补值。 赎金信:使用数组计数统计字符出现次数,通过减法操作验证字符串包含关系。 三数之和:在排序基础上,结合哈希表解决,重点处理外层循环和内层循环中的重复元素问题。 四数之和:采用双指针法,先固定两个数,再用双指针寻找剩余两数,注意处理去重问题。 这些题目展示了如何灵活运用哈希表和双指针技巧解决不同类型的求和问题,同时强调了排序和去重的重要性。
2025-06-04 14:44:01
748
原创 【算法训练营Day05】哈希表part1
哈希表理论基础:哈希表通过散列函数快速判断元素是否存在,常用拉链法、线性探测法处理碰撞。Java中HashSet存单个元素,HashMap存键值对,Linked系列保持插入顺序,Hashtable线程安全但多用ConcurrentHashMap替代。 有效字母异位词:通过数组实现简易哈希表,统计字母频次。数组索引作为key,适用于键值范围明确且密集的场景。优化后解法仅需O(n)时间。 数组交集:HashSet可直接取交集,若数值范围有限可用数组记录频次更高效。时间复杂度均为O(n)。 快乐数:记录计算过程中
2025-06-02 17:24:10
977
原创 【算法训练营Day04】链表part2
本文总结了四道链表相关算法题的解题思路和代码实现: 两两交换链表节点:使用虚拟头节点和交换指针进行相邻节点交换; 删除链表倒数第N个节点:通过反转链表后删除正数第N个节点再反转回来; 链表相交:利用栈结构反向遍历寻找公共后缀; 环形链表检测:使用哈希集合存储已访问节点判断是否有环。 每道题都提供了清晰的解题思路和Java代码实现,涵盖了链表操作中的常见技巧如虚拟头节点、双指针、栈辅助和哈希集合等。这些解法时间复杂度多为O(n),空间复杂度根据方法不同在O(1)到O(n)之间。
2025-05-31 13:06:57
377
原创 【算法训练营Day03】链表part1
本文介绍了链表的基础理论和常见操作。要点包括:链表与数组的区别(离散存储、指针连接、不支持随机访问),链表增删操作的优势(无需移动后续元素),以及虚拟头节点的使用技巧(统一操作逻辑)。文章提供了Java单链表的定义实现,并通过LeetCode题目展示了移除链表元素、设计链表和反转链表的具体代码实现。其中重点讲解了使用虚拟头节点简化边界处理,以及通过头插法实现链表反转的方法。这些内容涵盖了链表的核心概念和基本操作,为链表相关的算法问题提供了基础解决方案。
2025-05-30 19:35:14
572
原创 【算法训练营Day02】数组part2
本文总结了两道数组相关算法题的解题思路。209题使用滑动窗口法,通过双指针动态调整窗口大小寻找满足条件的最短子数组,注意处理总和不足的特殊情况。59题采用行为模拟法,通过坐标变换模拟螺旋填充过程,利用向量旋转实现转向逻辑。文章指出数组类问题的四大常用解法:二分法、双指针法、滑动窗口法和行为模拟法,强调滑动窗口具有单调性特点,行为模拟需从数学角度转化坐标变化。两题分别展示了滑动窗口和行为模拟的实际应用。
2025-05-29 12:01:54
355
原创 【算法训练营Day01】数组part1
本文总结了数组基础理论和三种双指针算法的解题思路:1. 数组特点:内存连续分配、元素只能覆盖,操作时需移动其他元素;2. 二分查找通过比较中间值调整前后指针范围;3. 移除元素使用双指针原地修改数组;4. 有序数组平方问题利用双指针从两端向中间填充结果数组。每种算法都给出了对应的Java实现代码,展示了双指针在数组问题中的高效应用。
2025-05-28 11:49:21
426
原创 2023NEFU实习项目解析 - 中俄贸易供需服务平台
本项目是完成一个中俄贸易服务供需平台后台管理端的后端部分,是一个原生的Javaweb项目,使用到servlet、jsp、jdbc等技术。VIP企业管理:普通企业管理:国际采购管理国际供应管理国际物流管理新闻资讯管理新闻资讯外贸助手关于我们首页管理统计分析。
2023-12-17 12:08:36
1542
1
原创 React进阶之路(三)-- Hooks
Hooks的本质:一套能够使函数组件更强大,更灵活的“钩子”有了hooks之后,为了兼容老版本,class类组件并没有被移除,俩者都可以使用有了hooks之后,不能在把函数成为无状态组件了,因为hooks为函数组件提供了状态hooks只能在函数组件中使用什么是副作用?副作用是相对于主作用来说的,一个函数除了主作用,其他的作用就是副作用。对于 React 组件来说,主作用就是根据数据(state/props)渲染 UI,除此之外都是副作用(比如,手动修改 DOM)常见的副作用数据请求 ajax发送。
2023-11-09 12:57:01
353
原创 SpringBoot快速实践 --Ⅰ
本文涉及快速启动提供一个SpringBoot项目、替换内嵌容器、玩转SpringBoot配置、全局异常处理、过滤器、拦截器、使用Lombok简洁代码、使用IDEA内置接口调试工具等内容。
2023-07-11 15:39:54
1174
原创 一文搞定SpringBoot中日志框架使用
本文涉及SpringBoot对日志框架的封装、SLF4J + LogBack、调试模式、LogBack扩展、SLF4J + Log4J2等内容。
2023-07-11 00:31:59
920
原创 一文弄懂Java日志框架
本文涉及日志的概念、日志门面、JUL日志框架、Log4J日志框架、JCL日志门面、SLF4J日志门面、LogBack日志框架、Log4J2日志框架、SpringBoot中的日志使用等内容。
2023-07-10 01:44:41
2259
原创 【手撕MyBatis源码】MyBatis启动流程、Configuration配置体系
本文涉及Configuration概述、Configuration的核心作用与配置来源、配置元素、元素承载、配置文件解析等内容。
2023-06-13 08:47:21
1373
原创 【手撕MyBatis源码】动态SQL全流程解析
本文涉及动态SQL概述、ONGL表达式、BoundSql、动态SQL主流程分析、SqlNode、SqlSource等内容。
2023-06-11 10:09:50
2243
1
原创 【手撕MyBatis源码】MyBatis映射体系
本文涉及映射工具MetaObject、ResultMap结果映射、嵌套子查询、循环依赖、懒加载、联合查询、嵌套查询等内容。
2023-06-10 13:33:44
1285
关于js变量作用域的问题
2022-03-15
有关java逻辑表达式的一个问题
2022-01-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人