本文展示了两类遍历算法的实现。首先给出二叉树的 Z 字型层序遍历,利用队列按层遍历节点,通过布尔标记奇偶层并在奇数层逆序输出,实现从左到右、右到左交替的结果。随后提供了文件系统的递归遍历示例,使用 Java 的 File 类遍历指定目录及其子目录,区分文件和文件夹,递归调用读取所有文件并输出名称。两段代码分别演示了树结构和文件结构的深度/广度遍历技巧。

本文围绕单向链表的常见面试题展开,重点介绍了判断环形链表的快慢指针法、使用链表实现哈希桶的查找与插删性能缺陷、以及奇数位升序、偶数位降序链表的分割‑反转‑合并排序思路。随后给出随机指针链表的 O(1) 额外空间复制算法和单链表的逆序实现,均以代码示例说明核心步骤。

本文展示了几道典型数组面试题及其实现思路。包括:① 用层次翻转在原地将 n×n 矩阵顺时针旋转 90°;② 利用全体异或找出唯一出现一次的元素;③ 通过哈希表在 O(n) 时间内找到和为 target 的一对数;④ 采用 Kadane 算法求连续子数组的最大和;⑤ 使用快速选择(基于快排划分)实现前 K 大元素或第 K 小元素的查找。每个问题均给出 Java 代码示例,重点突出时间复杂度与实现技巧。

本文先给出 Java 实现的冒泡排序代码示例,随后系统性列出常见排序算法:插入(含希尔)、交换(冒泡、快速)、选择(含堆)、归并、箱/基数等。重点阐述归并排序的分治合并过程、堆排序利用最大堆/最小堆的构建与调整以及通过左右堆实现数据流中位数的 O(log n) 插入、O(1) 查询。最后简要说明快速排序的基准划分、双指针扫描与递归分区,并提及各算法的时间复杂度特征。

堆用于存放通过 new 创建的对象实例和数组,只保存属性值和类信息,所有线程共享,由垃圾回收自动管理;栈是每个线程私有的内存,保存基本类型变量和对象引用的地址,空间由操作系统自动分配释放,遵循后进先出;方法区(静态区)同样共享,存放类元数据、static 变量和常量池。堆容量大但访问相对慢,需要显式 new ;栈容量有限但访问快,适合局部变量。两者配合实现对象的创建、定位和生命周期管理。

Java PriorityQueue 是基于堆实现的无界队列,元素按自然顺序或提供的比较器排序。它不接受 null,非线程安全,入队和出队的时间复杂度均为 O(log n)。