算法
文章平均质量分 65
算法学习
Huanghao.
这个作者很懒,什么都没留下…
展开
-
滑动窗口算法
什么是滑动窗口我们知道串的模式匹配算法(详见KMP算法)可以用来匹配子串,但是只能匹配主串中与子串一模一样的一部分;如果要求匹配主串中的最小覆盖子串,可以使用滑动窗口。滑动窗口本质上也是双指针(详见双指针法)的应用,具体步骤如下:先定义散列表need记录需要匹配的字符,散列表window记录匹配情况,两个指针left、right,注意这里是左闭右开[left,right),初始化时窗口内没有元素。然后right向右移动,直到匹配到子串中所有字符。right不再移动,left向右移动,原创 2022-02-17 14:37:30 · 812 阅读 · 0 评论 -
双指针法的应用
文章目录什么是双指针法左右双指针常见用法二分查找两数之和反转数组滑动窗口例题快慢双指针常见用法判断链表是否有环判断链表有环,找环的起点寻找链表中点寻找链表倒数第n个元素例题什么是双指针法双指针法,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行扫描,从而达到相应的目的。 这里的指针,并非专指c中指针的概念,而是指索引,游标或指针,可迭代对象。左右双指针分别指向两头,向中间逼近。通常应用在一个有序数组中。常见用法二分查找二分查找算法其实就是左右原创 2022-02-17 14:32:04 · 465 阅读 · 0 评论 -
辗转相除法求最大公因数,最小公倍数
首先用较大的数对较小的数取余,再用较小的数对余数取余,直到余数为0,此时除数为最大公因数,两数相乘再除以最大公因数即为最小公倍数。代码实现:#include<bits/stdc++.h>using namespace std;int main(){ int a,b,y,max,min; cin >> a >> b; max = a; min = b; if(a > b){ y=a; a=b; b=y; } while(a != 0){原创 2021-04-01 14:19:06 · 834 阅读 · 0 评论 -
进制转换
进制转换在学习算法的过程中常常需要进行进制转换,我们常用的进制有:二进制、八进制、十进制和十六进制。日常中使用十进制,计算机使用二进制,所以十进制和二进制常常作为转换的桥梁。其他进制转换为十进制将其他进制数按权展开、相加即得十进制数。例如:二进制数1101转换为十进制1 *23 + 1 *22 + 0 *21 + 1 *20 = 13八进制数23转换为十进制2 *81 + 3 *80 = 19十进制转换为其他进制将十进制数除以要转换的进制,余数为权位上的数,继续除,直到商为0。例原创 2021-03-30 22:19:38 · 764 阅读 · 0 评论 -
二分查找算法
二分查找二分查找是在一个有序数组中,将目标数与数组中值进行比较,每次将数组长度减半的高效率的查找算法。定义左端索引left,右端索引right,中值mid = (left + right)/ 2。将目标数与中值比较,若目标数 > 中值,则目标数在中值右边的区间,舍弃左区间,中值成为新的左端索引;若目标数 < 中值,同理;若目标数 = 中值,查找完成。循环结束的条件是右端索引 > 左端索引。例题一输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数原创 2021-03-29 11:44:33 · 926 阅读 · 1 评论