算法
文章平均质量分 75
ji_r
这个作者很懒,什么都没留下…
展开
-
滑动窗口(一)
什么是滑动窗口?大致就是如下图:维护left和right两个指针,在整个区间内,通过改变左右指针的移动,找到满足条件的区间(很多时候是最佳区间)。所以窗口的大小是在移动过程中改变的。目的:常用于将嵌套的循环问题,转换为单循环问题,降低时间复杂度。常用于解决数组/字符串的子元素问题。问题1及解决思路:1.先计算出前K个元素的和(即arr[0] + ...+ arr[k-1])。2.从i=k to arr.size() - 1, sum += arr[i] - arr[i-k]; /原创 2020-06-18 21:37:11 · 351 阅读 · 0 评论 -
蓄水池采样问题(Reservoir sampling question)
问题: 在给定的但未知其大小的数据集中,随机等概率的抽取一个元素。分析: 如果知道数据集的大小,可以直接rand() % len得到一个确切的位置。所以未知长度时,即可使用蓄水池采样。算法思路: 总是选择第一个对象,以的概率选中第二个数据,依次类推... 以的概率选中第m个数据。此时可以保证被选中的概率为。第m个被选中,那么就是说后面的都不被选中(第m个数据不被选中,前m - 1个随机选...原创 2019-10-15 23:25:21 · 260 阅读 · 0 评论 -
约数的个数
题目描述:输入n个整数,依次输出每个数的约数的个数。输入描述:输入的第一行为N,即数组的个数(N<=1000),接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000),当N=0时输入结束。输出描述:可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。分析:如何求一个数的约数个数,常规的就是从1- n(表示这个数本身...原创 2018-04-21 23:10:51 · 4662 阅读 · 0 评论 -
动态规划及实例
01背包问题:一个容量为C的背包,n个物品,他们的重量分别是w[i],价值分别是v[i],怎样选择装入的物品使价值最大?分析:面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。所以声明一个 大小为 m[n][c] 的二维数组,m[ i ][ j ] 表示 在面对第 i 件物品,且背包容量为 j 时所能获得的最大价值 ,那么我们可以很容易分析得出...原创 2018-04-26 21:48:17 · 523 阅读 · 0 评论 -
求解组合数取模---拓展欧几里德和费马小定理求解逆元
组合数:C(n, m) ; 组合数取模:C(n, m) % mod,mod是一个很大的数。1.公式:2.性质:(1)C(n,m)= C(n,n-m) 其中有C(n, 0) = 1; (2)C(n,m)=C(n-1,m-1)+C(n-1,m)。可以用作递归中的公式。性质2和杨辉三角的相似性(核心部分就是利用了性质2)。例题:打印杨辉三角:#include<i...原创 2018-06-13 15:24:41 · 790 阅读 · 0 评论 -
动态规划解决---最长递减(或递增)序列
定义:在一个没有排好序的数组中,找最长的单调递减或单调递增的序列。解题思路:通过动态规划解题。假设从0--(i - 1)已经构成了长度为s的递减序列,且这些序列中的末尾值中的最大值为t;1、如果a[i] < t,则假如到这个序列中去,长度变为s + 1。对应的末尾值变为a[i]。2、如果a[i] == t, 则说明从0 - i 的最长序列长度为s。3、如果a[i] > t,a[i]不一...原创 2018-06-10 20:28:43 · 2729 阅读 · 0 评论 -
斐波那契数列
这次介绍的是以斐波那契数列为原型,解决大家在一些编程题中遇到的。如上楼梯。斐波那契数列在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)参考代码:int Fibonacci(int n){ int fib[n + 1]; fib[0] = 0; fib[1] = 1; for(int i = 2; ...原创 2018-04-09 19:28:02 · 233 阅读 · 0 评论