
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
本文介绍了四道LeetCode题目的解题思路和代码实现: 整数替换(LC 397):给出两种解法,递归+记忆化搜索(利用备忘录记录操作次数)和贪心算法(通过二进制分析奇偶性优化操作)。 俄罗斯套娃信封问题(LC 354):转化为最长递增子序列问题,动态规划解法可能超时,推荐贪心+二分法,需注意排序规则(左端点升序,右端点降序)。 可被三整除的最大和(LC 1262):计算总和后,根据余数情况删除最

本文介绍了链表的基本概念与结构特点,重点分析了无头单向非循环链表和无头双向循环链表两种核心结构。通过模拟Java的LinkedList实现,详细讲解了链表的核心操作:增(头插、尾插、任意位置插入)、删(删除单个节点和所有匹配节点)、查(包含判断和长度统计)。文中特别强调了插入操作的顺序问题,以及删除操作中边界条件的处理。代码实现展示了链表操作的关键逻辑,包括节点引用修改、异常处理等,为理解链表数据

本文总结了LeetCode上几道关于贪心算法的题目,包括加油站、单调递增数字、坏的计算器、合并区间和无重叠区间。解题思路主要围绕贪心策略展开:对于加油站问题,通过比较油量差寻找可行起点;单调递增数字采用递归调整数字位置;坏的计算器采用逆向思维;合并区间按左端点排序后处理重叠;无重叠区间则优先保留右端点小的区间。这些题目展示了贪心算法在不同场景下的灵活应用,通过局部最优解逐步达到全局最优。

优先级队列是一种按元素优先级决定出队顺序的数据结构,底层通过堆实现。堆分为小堆和大堆,具有完全二叉树性质,可使用数组高效存储。堆的核心操作包括向下调整(O(log n))、向上调整(O(log n))以及建堆(O(n))。基于这些操作可模拟优先级队列的插入、删除等功能。Java中的PriorityQueue默认实现小堆,支持自动扩容,插入和删除操作时间复杂度为O(log n),适用于需要动态优先级

本文系统介绍了七大基于比较的排序算法,主要分为插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)和归并排序四大类。文章首先阐述了排序的基本概念,包括稳定性、内部与外部排序的区别。随后详细讲解了每种算法的核心思想、实现过程(附Java代码示例)、时间复杂度分析(如直接插入排序O(N²)、堆排序O(NlogN))及适用场景。特别强调了不同算法在稳定性(

本文总结了6道LeetCode贪心算法题目的解题思路和代码实现。包括最长回文串(统计字符频率)、增减字符串匹配(双指针填数)、分发饼干(排序+双指针)、最优除法(数学推导)、跳跃游戏II(动态规划/贪心策略)和跳跃游戏(贪心判断可达性)。每道题目都提供了清晰的解题思路和对应的Java代码实现,涵盖了贪心算法的常见应用场景,如字符串处理、数组操作和游戏策略等。这些解法都体现了贪心算法"局部最优解导向

本文介绍了贪心算法及其应用,通过5个LeetCode题目展示了贪心策略的实现: 柠檬水找零:通过优先使用大额钞票的策略处理找零问题,确保5元钞票充足。 数组减半操作:使用大根堆每次处理最大元素,快速减少数组总和。 最大数拼接:通过自定义字符串比较规则,将数字拼接成最大数值。 摆动序列:统计波峰波谷数量确定最长摆动子序列长度。 递增子序列:维护最小末尾数组,利用二分查找优化查找过程。 这些题目展示了

本文总结了链表操作的常用技巧和解题方法。技巧包括:多画图辅助理解、使用虚拟头结点简化边界处理、创建局部变量降低复杂度,以及快慢双指针解决环检测等问题。操作部分介绍了创建节点、尾插和头插等基本方法。重点解析了LeetCode两数相加问题(LC2)的模拟解法,通过维护进位变量和尾插法构建结果链表。同时拓展了牛客网链表相加问题(NC40),强调需要先逆序链表再进行相加操作。代码示例展示了如何通过逆序、相

本文介绍了三个二叉树相关算法题目的解题思路与代码实现。1. 二叉搜索树转双向链表(BM30):通过中序遍历调整指针指向,要求空间复杂度O(1),时间复杂度O(n);2. 二叉树遍历(KY11):根据先序字符串构建二叉树并进行中序遍历,处理特殊字符'#'表示空节点;3. 二叉树的层序遍历(LC102):使用队列实现广度优先搜索,按层输出节点值。每个问题都提供了详细的分析图示和Java代码示例,重点讲

本文系统讲解了树型结构和二叉树的核心知识。首先介绍了树的定义、特点及重要概念(如度、层次、深度等),并阐述了树的表示方法和文件系统应用。其次重点解析了二叉树的定义、特性、两种特殊类型(满二叉树和完全二叉树)及其五大核心性质。最后说明了二叉树的两种存储结构(顺序存储和链式存储)并提供了Java代码实现示例。全文通过理论讲解与图示相结合的方式,全面覆盖了树和二叉树的基础知识体系。








