题目: 解答: 方法一: 线性时间复杂度解法这道题最优的解法就是线性复杂度了,为了保证每个元素是唯一的,至少得把每个字符都遍历一遍。 算法的思路就是遍历一遍字符串,然后把字符串中每个字符出现的次数保存在一个散列表中。这个过程的时间复杂度为 O(N)O(N),其中 NN 为字符串的长度。 接下来需要再 ...
分类:
其他好文 时间:
2020-05-03 20:16:06
阅读次数:
49
"https://leetcode.com/problems/single number/" 给定一个非空数组,除了有一个元素外,其他元素出现了两次,找出那个出现了1次的数 要求:线性复杂度,且不能使用额外内存空间 分析: 使用 异或 XOR ,因为 a ^ a=0,这样就可以将里面相同的两两进行抵 ...
分类:
其他好文 时间:
2020-04-02 22:57:28
阅读次数:
85
核心思想: 通过巧妙的设计使得我们能用一个DAG和树的复合结构来在线性复杂度内存储一个串的$n^2$个子串的信息。 定义: 1.后缀自动机的结构类似于AC自动机,每个点表示一个endpos等价类(子串结束位置的集合,以下简称为状态),边同AC自动机中的边。即后缀自动机上从根到一个点有若干条路径,这些 ...
分类:
其他好文 时间:
2020-02-10 22:47:35
阅读次数:
84
KMP算法 KMP是一种字符串匹配算法。此算法的核心在于$kmp$数组以及它的求法。 (以下约定字符串下标从$1$开始) $\bm{kmp}$数组 定义$kmp$数组:$kmp_{a,i}$表示字符串$a$的前缀$a_{1\sim i}$的最长相同真前后缀的长度,即$kmp_{a,i}=\max\l ...
分类:
编程语言 时间:
2019-08-21 21:40:21
阅读次数:
116
题目 题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现三次。找出那个只出现一次的元素。 说明:你的算法应该具有线性时间的复杂度。你可以不使用额外的空间来实现吗? 思路 题目要求线性复杂度,一般的算法做不到,不难想到用位运算。但怎么进行位运算,比较难想到。 ^ 相当于除去 ...
分类:
其他好文 时间:
2019-02-03 12:34:37
阅读次数:
233
我们求 x1 + x2 + ... + xn = a 的非负整数解数量时,将它转换成了组合数的求解问题,使原本暴力枚举的指数级复杂度降为求阶乘的线性复杂度。我们求图中生成树个数的时候,也可以根据 matrix-tree 定理转换成线性代数中求行列式的问题。两个问题的思路是一致,将原问题转换为另一领域... ...
分类:
编程语言 时间:
2019-01-17 14:00:07
阅读次数:
206
本文半原创 参考资料: "其实就是照抄的什么参考啊" 我们知道KMP可以用来在线性复杂度内进行制胡窜匹配 今天教您一种新方法:用FFT进行字符串匹配 您可能觉得这很玄学,FFT不是做多项式卷积的吗,怎么还可以做制胡窜匹配 您先别着急,请接着听 我们设两个字符串 模式串$a$,长度为$m$,文本串$b ...
分类:
其他好文 时间:
2018-12-04 21:09:32
阅读次数:
256
快排和二分查找都基于一种叫做「分治」的算法思想,通过对数据进行分类处理,不断降低数量级,实现O(logN)(对数级别,比O(n)这种线性复杂度更低的一种,快排核心是二分法的O(logN),实际复杂度为O(N*logN))的复杂度。 快速排序 快排大概的流程是: 二分查找 二分查找法主要是解决「在一堆 ...
分类:
编程语言 时间:
2018-08-14 15:41:39
阅读次数:
303
// #include"cstdio" // #include"cstring" // using namespace std; // #define maxn 100000//求maxn范围内的素数 // long long su[maxn],cnt; // bool isprime[maxn];... ...
分类:
其他好文 时间:
2018-07-22 23:31:26
阅读次数:
256
LeetCode 地址:https://leetcode.com/problems/maximum-gap/description/ 题目描述 给定一个未排序数组,找出排序后的元素之间的最大间隔。 要求用线性时间复杂度实现。 例如:输入为【3,6,9,1,10】,输出应为最大间隔3。 题目分析 线性 ...
分类:
编程语言 时间:
2018-05-29 20:43:21
阅读次数:
725