1.5k1 分鐘

# 第 k 个数 - 快速选择 #include <iostream> using namespace std; const int N = 1e6 + 10; int n, k; int q[N]; int quick_sort(int l, int r, int k){ if(l == r) return q[l]; int x = q[l], i = l - 1, j = r + 1; while(i < j){ while(q[++i] &
1.2k1 分鐘

# 数的三次方根 - 二分 #include <iostream> using namespace std; int main(){ double x; cin >> x; double l = -10000, r = 10000; while(r - l > 1e-8){ double mid = (l + r) / 2; if(mid * mid * mid >= x) r = mid; el
9321 分鐘

# 判断子序列 - 双指针 #include <iostream> using namespace std; const int N = 1e6 + 10; int n, m, i; int a[N], b[N]; int main(){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ scanf("%d", &a[i]); } for(int i = 0; i < m; i
1.7k2 分鐘

# 归并排序 - 快排是不稳定的 / 而归并排序是稳定的 #include <iostream> using namespace std; const int N = 1e6 + 10; int n; int q[N], tmp[N]; void merge_sort(int q[], int l, int r){ if(l >= r) return; int mid = (l + r) / 2; merge_sort(q, l, mid), merge_sort(q, mid + 1
1.9k2 分鐘

# 高精度加法 #include <iostream> #include <vector> using namespace std; const int N = 1e6 + 10; vector<int> add(vector<int> &A, vector<int> &B){ vector<int> C; int t = 0; for(int i = 0; i < A.size() || i < B.size(); i++){
2.2k2 分鐘

# 逆序对的数量 - 归并排序 # C++ 中 signed main 和 int main 的区别 # C 语言中 int main (int argc, char *argv []) 的两个参数的详解 #include <iostream> using namespace std; typedef long long LL; const int N = 1e6 + 10; int n; int q[N], tmp[N]; LL merge_sort(int l, int r){ if(l >= r) return 0;