随笔分类 - 算法和数据结构
摘要:void print(int n) { if(n == 0) return; int row = 0, col = 0, cur_val = 1; int **arr = new int *[n]; for (int i = 0; i < n; i++) { arr[i] = new int[n];
阅读全文
摘要:1、时间复杂度:O(NlogK)。 std::vector<int> arr = {10, 3, 5, 6, 2, 3, 112, 35}; std::priority_queue<int, std::vector<int>, std::greater<int> > q; // std::prior
阅读全文
摘要:1、时间复杂度:O(N^N)。 2、算法实现 2.1)每趟需要把无序区间的最大的数放到尾部,所以最多需要N-1趟; 2.2)第i趟的无序区间是[0, N-1-i]。 2.3)无序区间的相邻元素两两比较,满足条件则交换。 void bubble_sort(std::vector<int> &arr)
阅读全文
摘要:1、时间复杂度:O(NlogN)。 2、算法思想:分治。 3、算法实现 1)从数组中取一个数作为基准数pivot,基准数所在的位置hole; 2)把不大于pivot的数放到左边,大于的放到右边,这样就形成左右两个子数组; 2.1)从右向左找一个不大于pivot的数,放到位置hole上,更新hole为
阅读全文
摘要:1、计数器算法 限制单位时间内(例如一秒)处理的请求数,比如qps。在每个单位时间的起点,请求从1开始计数,超过限制的请求会被丢弃。这种算法的缺点是,对于请求分布不均匀的情况,容易产生突刺,对服务造成很大压力。 2、漏桶算法 可以消除突刺。用一定容量的队列(即漏桶),缓存请求,超过容量的请求被丢弃;
阅读全文
摘要:x + y = sum 1、最简单的想法就是直接两重循环,嵌套遍历x和y,时间复杂度是O(N2),N是数组的元素个数。 2、转化一下,x = sum - y。sum - y遍历y可以得到,时间复杂度是O(N)。问题变成:对比两个数组,是否包含相同元素。嵌套遍历,还是两重循环。但是如果其中一个数组是有
阅读全文
摘要:求浮点数x的平方根y,精度误差e。 1、显然y <= x,即在 [0, x] 中查找一个y,使得满足 | y * y - x | <= e,很容易想到二分查找,时间复杂度是O(logx)。
阅读全文
摘要:欧几里得算法,又叫辗转相除法,用于计算两个整数的最大公约数
阅读全文
摘要:1、找两个不相等的大质数p和q(可用筛法求素数),令n=p*q 2、令r=φ(n) 非对称加密 密钥(公钥和私钥) 算术基本定理:每个大于1的整数有且只有一种质因子分解式。(不考虑质因子次序) 欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的个数。 1)当n为质数,则φ(n)=n-1 两个或两
阅读全文

浙公网安备 33010602011771号