简述 快排是排序算法中绕不开的关键一环,其中涉及到分治算法,二分查找等关键知识。 本文内容: 快排原理 代码实现 分区过程图示 <啊哈算法> 中的另一种实现 复杂度 优化 快...
简述 快排是排序算法中绕不开的关键一环,其中涉及到分治算法,二分查找等关键知识。 本文内容: 快排原理 代码实现 分区过程图示 <啊哈算法> 中的另一种实现 复杂度 优化 快...
简述 算法导论中,在第二章提及了归并排序,归并排序是分治思想的一个重要实现,只要提及分治算法,就不得不提及归并排序。 原理 归并排序有 2 个步骤: 将数据平均分成 2 个序...
递归的时间复杂度计算较为麻烦。以下我们使用归并排序的例子,对递归复杂度进行推演。 假设现在有一个归并排序。他的运行总时间是 T(n),我们通过将其分解成 2 个计算式,即 :...
1 什么是递归 递归是一种非常高效,简洁的编码技巧,一种应用非常广泛的算法。比如 DFS 深度优先搜索、前后中序二叉树遍历等都是使用递归。 方式或函数调用自身的方式,称之为递...
题目描述: 具体如下图: 即,将 L1 和 L2 链表进行合并。 思路1:递归 每次比较 l1 和 val 和 l2 的 val,谁小,就继续循环他的 next 节递归进行比...
题目描述: 这里考察的也是快慢指针。 当然,如果我们用 HashSet ,也可以实现。当时明显不是这道题的考察目的。 我们假设,使用 2 个指针,快指针是慢指针的 2 倍速。...
题目描述: 这题考察的也是快慢指针。 我们对偶数和奇数分别进行分析: 当链表是偶数时,我们需要判断他自身是否为 null,如果为 null,说明到了末尾。 当链表是奇数时,我...
引言 题目描述: 简单说,这道题的的公式就是:(length - n + 1).next = (length - n).next;即,将 n 的 pre 节点的 next 节...
链表题中,链表反转应该是出现频率最高的一道题。 如何实现? 我们分析一下,一个链表,【1, 2,3,4,5】,反转成 【5,4,3,2,1】,我们可以适应循环。 循环的过程中...
引言 队列,是一个线性表,和数组,栈,链表类似。队列和栈类似,戏称“边吃边拉”。即 FIFO。 队列和栈还有一个不同,栈只需维护一个栈顶指针,而队列需要维护 2 个指针,队首...
前述 栈,戏称“边吃边拉”。 栈是一种“操作受限” 的数据结构,只有 push 和 pop 两种操作。先进先出,后劲后出。 可以由数组实现,也可以是链表实现,前者称之为 顺序...
前述 链表代码不好写,初学者经常容易出错。掌握以下几个规则,可能可以提高编写链表的技术。一共 6 个技巧: 1. 理解指针或引用的含义 对一个引用进行赋值,其实就是将这个变量...
简述 在数据结构与算法中,“时间复杂度”表示“随着数据规模的增长,他的增长趋势”,而时间复杂度,通过细化,可以分为:最好时间复杂度,最坏时间复杂度,平均时间复杂度,均摊时间复...