随笔分类 -  算法和数据结构

摘要: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]; 阅读全文
posted @ 2020-04-08 15:42 happyyoung 阅读(305) 评论(0) 推荐(0)
摘要: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 阅读全文
posted @ 2020-03-19 15:50 happyyoung 阅读(212) 评论(0) 推荐(0)
摘要: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) 阅读全文
posted @ 2020-03-19 14:37 happyyoung 阅读(181) 评论(0) 推荐(0)
摘要:1、时间复杂度:O(NlogN)。 2、算法思想:分治。 3、算法实现 1)从数组中取一个数作为基准数pivot,基准数所在的位置hole; 2)把不大于pivot的数放到左边,大于的放到右边,这样就形成左右两个子数组; 2.1)从右向左找一个不大于pivot的数,放到位置hole上,更新hole为 阅读全文
posted @ 2020-03-18 19:53 happyyoung 阅读(159) 评论(0) 推荐(0)
摘要:1、计数器算法 限制单位时间内(例如一秒)处理的请求数,比如qps。在每个单位时间的起点,请求从1开始计数,超过限制的请求会被丢弃。这种算法的缺点是,对于请求分布不均匀的情况,容易产生突刺,对服务造成很大压力。 2、漏桶算法 可以消除突刺。用一定容量的队列(即漏桶),缓存请求,超过容量的请求被丢弃; 阅读全文
posted @ 2020-03-16 17:41 happyyoung 阅读(170) 评论(0) 推荐(0)
摘要:筛法求素数 阅读全文
posted @ 2020-02-11 16:00 happyyoung 阅读(146) 评论(0) 推荐(0)
摘要:x + y = sum 1、最简单的想法就是直接两重循环,嵌套遍历x和y,时间复杂度是O(N2),N是数组的元素个数。 2、转化一下,x = sum - y。sum - y遍历y可以得到,时间复杂度是O(N)。问题变成:对比两个数组,是否包含相同元素。嵌套遍历,还是两重循环。但是如果其中一个数组是有 阅读全文
posted @ 2020-01-10 10:40 happyyoung 阅读(1265) 评论(0) 推荐(0)
摘要:求浮点数x的平方根y,精度误差e。 1、显然y <= x,即在 [0, x] 中查找一个y,使得满足 | y * y - x | <= e,很容易想到二分查找,时间复杂度是O(logx)。 阅读全文
posted @ 2020-01-09 06:39 happyyoung 阅读(2358) 评论(0) 推荐(1)
摘要:记忆化搜索 阅读全文
posted @ 2019-02-19 10:03 happyyoung 阅读(140) 评论(0) 推荐(0)
摘要:大整数加法 阅读全文
posted @ 2019-02-19 10:03 happyyoung 阅读(233) 评论(0) 推荐(0)
摘要:二叉搜索树 中序遍历 阅读全文
posted @ 2019-02-13 17:47 happyyoung 阅读(152) 评论(0) 推荐(0)
摘要:一致性哈希 阅读全文
posted @ 2019-02-13 09:08 happyyoung 阅读(125) 评论(0) 推荐(0)
摘要:查找 阅读全文
posted @ 2019-02-11 00:34 happyyoung 阅读(348) 评论(0) 推荐(0)
摘要:欧几里得算法,又叫辗转相除法,用于计算两个整数的最大公约数 阅读全文
posted @ 2018-01-18 09:58 happyyoung 阅读(116) 评论(0) 推荐(0)
摘要:扩展欧几里得算法 阅读全文
posted @ 2018-01-16 19:38 happyyoung 阅读(103) 评论(0) 推荐(0)
摘要:1、找两个不相等的大质数p和q(可用筛法求素数),令n=p*q 2、令r=φ(n) 非对称加密 密钥(公钥和私钥) 算术基本定理:每个大于1的整数有且只有一种质因子分解式。(不考虑质因子次序) 欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的个数。 1)当n为质数,则φ(n)=n-1 两个或两 阅读全文
posted @ 2018-01-16 19:35 happyyoung 阅读(129) 评论(0) 推荐(0)