C++ 算法解题技巧大全 CHEAT SHEET
C++ 解题 CHEAT SHEET
- C++ 算法解题技巧大全 CHEAT SHEET
- C/C++环境 头文件
- 算法(套路)总结
- 数据结构
- 数据结构易错点总结
C/C++环境 头文件
万能头文件,VS兼容版
#include<bits/stdc++.h>
#include<unordered_map>
#include<deque>
using namespace std;
#define INF 0x7fffffff
typedef long long ll;
不使用万能头文件
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<unordered_map> //哈希表
#include<deque> //双端队列(可以pop_front也可以pop_back)
using namespace std;
#define INF 0x7fffffff
typedef long long ll;
算法(套路)总结
快速幂/快速乘方:
快速计算实数的整数幂,将时间复杂度从O(N)降到O(logN)
本质就是动态规划/分治法,递推方程为:
递归调用即可
//分治法快速幂(n>=0)
double myPow(double x, long long n)
{
if (n == 0)return 1;
if (x == 0 || x == 1 || n == 1)return x;
double tem = myPow(x, n / 2);
if (n % 2 == 0) return tem * tem;
else return tem * tem*x;
}
其他:幂结果很可能很大,造成溢出,有的题目要求只计算末尾n位:
就是最终结果 m o d 1 0 n mod \ 10^n mod 10n的意思,结合带余除法公式 ( a × b ) m o d p = ( a m o d p ) × ( b m o d p ) (a\times b)mod\ p=(a\mod p)\times(b\mod p) (a×b)mod p=(amodp)×(bmodp),即mod运算对加减乘都有分配律,在循环每一步迭代时都 m o d 1 0 n mod \ 10^n mod 10n即可
快速开根号/快速开方:
来自字节移动端二面
使用牛顿法即可,牛顿法可以求解一切常见函数零点问题/方程的根
(必背)牛顿法公式:求方程 f ( x ) = 0 f(x)=0 f(x)=0的解 x 0 x_0 x0,可以用 x n + 1 = x n − f ( x n )