摘要:
题目: 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 阅读全文
摘要:
题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围 阅读全文
摘要:
快速排序:原理、实现与优化 1. 引言 快速排序(Quick Sort)是一种高效、常用的排序算法,由 Tony Hoare 在 1960 年提出。它是一种分治算法,采用了分而治之的思想。快速排序的平均时间复杂度为 O(n log n),在实际应用中通常比其他 O(n log n) 算法更快。下面将 阅读全文
摘要:
模板方法模式(Template Method Pattern) 1. 简介 模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 2. 为什么使用模板方法模式? 代码复用:将公共代码放在抽象类中, 阅读全文
摘要:
归并排序:原理、实现与优化 1. 引言 归并排序(Merge Sort)是一种高效的、基于分治思想的排序算法。它的主要思想是将数组分成两半,分别排序,然后将排序后的两半合并成一个有序数组。归并排序的时间复杂度为 O(n log n),是一种稳定的排序算法。下面将详细介绍归并排序的原理、Java 实现 阅读全文
摘要:
堆与堆排序:堆数据结构、原理与实现 1. 引言 堆排序(Heap Sort)是一种高效的排序算法,它利用堆这种特殊的数据结构来进行排序。堆排序是选择排序的一种改进,它的时间复杂度为 O(n log n),是一种不稳定的排序算法。在深入了解堆排序之前,首先需要理解堆这种数据结构的特性和操作。下面将详细 阅读全文
摘要:
希尔排序:原理、实现与分析 1. 引言 希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。它由 Donald Shell 于 1959 年提出,是第一个突破 O(n^2) 的排序算法。希尔排序是一种非稳定排序算法,其基本思想是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入 阅读全文
摘要:
观察者模式(Observer Pattern) 1. 简介 观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2. 为什么使用观察者模式? 松耦合:主题和观察者之间是松耦合 阅读全文
摘要:
直接插入排序:原理、实现与分析 1. 引言 直接插入排序(Straight Insertion Sort),通常简称为插入排序,是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将详细介绍插入排序的原理、Java 实现、优化 阅读全文
摘要:
简单选择排序:原理、实现与分析 1. 引言 简单选择排序(Simple Selection Sort),通常简称为选择排序,是一种简单直观的排序算法。它的工作原理是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的 阅读全文