关于刷题顺序、题解和时间复杂度的简要介绍
一部分是跟着LeetCode cookbook刷的
还有一部分是自己做的专题
题目源于:LeetCode
注:一般算法题的时间限制是1秒或2秒。C++每秒操作次数在10 ^ 7 ∼ 10 ^ 8
在这种情况下,C++代码中的操作次数控制在 10 ^ 7 ∼ 10 ^ 8为最佳。
数据规模 | 时间复杂度 | 应采用的方法 | |
---|---|---|---|
1 | n ≤ 30 | O(n!) | 全排列、DFS + 剪枝、状态压缩 DP |
2 | n ≤ 100 | O(n ^ 3) | DFS 搜索、DP 动态规划、Floyd、高斯消元 |
3 | n ≤ 1000 | O(n ^ 2) | 稠密图、任意两点最短路径、DP 动态规划 |
4 | n ≤ 10^4 | O(n ^ sqrt(n)) | 块状链表、分块 |
5 | n ≤ 10^5 | O(nlog n) | 各种排序、线段树、dijkstra + heap |
6 | n ≤ 10^6 | O(n) | KMP、双指针扫描、hash、并查集、Spfa |
7 | n ≤ 10^7 | O(n) | KMP、线性筛素数、双指针扫描、拓扑排序 |
8 | n ≤ 10^9 | O(sqrt(n)) | 判断质数、求平方根 |
9 | n ≤ 10^18 | O(log n) | 最大公约数、快速幂、数位 DP |
10 | n ≤ +∞ | O(1) | 数学相关算法、高精度加减乘除 |
本文作者:southyang
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!