"题目" 题意:就是给你一个数组,让你输出排好序后,相邻元素差值最大的那个差值。 题解:首先,当然我们可以用快排,排完序之后,遍历一遍数组,就能得到答案了。但是快速排序的效率是O(n logn),不是题目要求的线性效率,也就是O(n)的效率。 那么诸多排序算法中,也是由线性效率的排序算法,当然这些算 ...
分类:
编程语言 时间:
2020-01-22 19:58:21
阅读次数:
96
散列表的实现通常叫做散列。散列是一种用于以常数平均时间执行插入、删除和查找的技术。但是任何排序的信息都不会得到有效的支持。所以FindMax(),FindMin(),以及以线性时间打印的操作都是散列所不支持的。 理想的散列表数据结构值不过是一个包含有关键字的具有固定大小的数组。 关键字映射的函数叫做 ...
分类:
其他好文 时间:
2020-01-18 00:43:45
阅读次数:
84
一说到排序算法,大部分人都会说出著名的万金油-快速排序、大数据分而治之-归并排序、大数据排名-堆排序。这些排序无论在面试还是实际项目中,都是经常用到的一些排序算法,其平均时间复杂度都在 O(N ? log2N),那今天我们就来介绍几种 O(N)的排序算法。 1,计数排序,输入 n 个范围在 0-k ...
分类:
编程语言 时间:
2020-01-15 19:31:52
阅读次数:
90
该算法以快排为基础 int random_select(int A[], int p, int r, int i) { if (p == r) return A[p]; int q = random_partition(A, p, r); int k = q - p + 1; if (i == k) ...
分类:
编程语言 时间:
2020-01-10 01:20:33
阅读次数:
121
0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时 ...
分类:
编程语言 时间:
2019-12-30 11:41:00
阅读次数:
101
"POJ2488" 题目 骑士按照下图所示的走法对棋盘进行巡逻,每个格子只允许巡逻一次,且必须巡逻所有格子。给定棋盘的行数p和列数q,输出一条骑士巡逻路径,若不存在这样一条路径,则输出impossible。 图1 骑士的8种走法 骑士巡逻问题的简化版本,是哈密顿路径问题的特殊形式,但是是线性时间内可 ...
分类:
其他好文 时间:
2019-12-27 13:53:25
阅读次数:
94
后缀自动机 (suffix automaton, SAM) 是一个能解决许多字符串相关问题的有力的数据结构。(否则我们也不会用它) 举几个例子,以下的字符串问题都可以在线性时间内通过 SAM 解决 1.在另一个字符串中搜索一个字符串的所有出现位置。(诶?KMP好像能做) 2.计算给定的字符串中有多少 ...
分类:
其他好文 时间:
2019-12-17 20:35:36
阅读次数:
102
求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 $O(nlogK)$。借助于分治思想,以及快速排序的区间划分,我们可以做到 $O(n)$ 时间复杂度。具体算法思路如下: 第 1 步,我们将原数据 5 个一组划分为若干个组,最后余下的不足 5 个的额外作为一组,总组数 ...
分类:
其他好文 时间:
2019-12-03 23:45:32
阅读次数:
122
计数排序 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 1. 计数排序的特征 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任... ...
分类:
编程语言 时间:
2019-12-02 23:20:34
阅读次数:
155
KMP总结 什么是KMP? KMP算法,又称为模式匹配算法,能够在线性时间内判定字符串 $A[1$~$N]$ 是否为字符串 $B[1$~$M]$ 的子串,并求出字符串 $A$ 在字符串 $B$ 中各次出现的位置。(from 李煜东《算法竞赛进阶指南》) 如何进行KMP? 第一步: $A$串进行自我匹 ...
分类:
其他好文 时间:
2019-11-24 13:54:45
阅读次数:
62