数组有序即可用双指针! 快慢指针 原地修改(链表反转(头反转【pre,cur,原地循环交换】、中间局部反转【找前、断中、反中、连后】、k个一组反转【计算长度、初始化前驱和头尾节点、循环取K个、逐组反转、更新前驱和尾结点】)) 左右指针和快慢指针: 左右指针,相向而行或者相背而行 快慢指针,同向而行,一快一慢 数组中索引作为指针 滑动窗口 left 指针在后,right 指针在前,中间
应用场景寻找一个数、寻找左侧边界、寻找右侧边界。这三种场景使用统一的框架,while 条件统一用 <=,边界更新统一用 mid ± 1(mid=left + (right - left) / 2,等价于(left + right) / 2,防止整形溢出,便于记忆。 有序数组旋转找目标值:有序数组旋转后对半局部有序,先看 mid 命中没有;再判断哪半边有序;最后看 target 在不在有序那
应用场景主要用来解决子数组问题,比如让你寻找符合某个条件的最长/最短子数组 框架模板基于这个框架,遇到子串/子数组相关的题目,你只需要回答以下三个问题: 1、什么时候应该移动 right 扩大窗口?窗口加入字符时,应该更新哪些数据?2、什么时候窗口应该暂停扩大,开始移动 left 缩小窗口?从窗口移出字符时,应该更新哪些数据?3、什么时候应该更新结果? 123456789101
应用场景主要适用的场景是原始数组不会被修改的情况下,前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。 框架模板12345678910111213141516171819class NumArray { // 前缀和数组 private int[] preSum; // 输入一个数组,构造前缀和 public NumArray(int[] nums) &#
二叉堆详解
二叉堆(Binary Heap)技术详解目录 二叉堆的性质 最常见的应用:优先级队列 另一种应用:堆排序 一、二叉堆的性质1.1 基本定义二叉堆(Binary Heap)是一种特殊的完全二叉树数据结构,满足堆性质(Heap Property)。它是实现优先级队列和堆排序算法的基础。 核心特征: 完全二叉树结构:所有层级都被填满,除了最后一层,且最后一层的节点从左到右填充 堆性质:每个节点的值
多叉树遍历算法详解
多叉树遍历算法详解 Java 实现 - 递归遍历(三种)+ 层序遍历(三种) 📖 目录 树结构定义 递归遍历 前序遍历 后序遍历 深度优先遍历(DFS) 层序遍历 标准层序遍历 按层遍历 之字形层序遍历 完整代码 测试结果 🌲 树结构定义123456789101112131415// 多叉树节点类class TreeNode { int val;
TreeMap 与 TreeSet 的简单实现
TreeMap 与 TreeSet 的简单实现 基于二叉搜索树(BST)的 Java 实现 📖 目录 概述 TreeMap 实现 TreeSet 实现 使用示例 复杂度分析 📝 概述根据 Labuladong 二叉搜索树的应用及可视化 中的接口说明,本文实现了以下接口: TreeMap 接口1234567891011121314151617class MyTreeMap<K, V&
事务事务特性(ACID) 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 可以借