![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
各类算法合集。
kano_s
天寒地冻,路远马亡。
展开
-
十四天算法快速入门第十四天之「位运算」
运用异或的性质即可。举例:2^3^4^2^3 等价于 2^2^3^3^4 等价于 0^0^4,结果为4。设置从右往左截取n的每一位(32次)再加入到i中即可。原创 2022-10-31 18:54:43 · 202 阅读 · 0 评论 -
十四天算法快速入门第十三天之「位运算」
目录题目一:231. 2 的幂 题目描述:题目分析:题解代码:题目二:191. 位1的个数题目描述:题目分析:题解代码: 题目二:191. 位1的个数题目描述:原创 2022-10-14 12:49:57 · 283 阅读 · 0 评论 -
十四天算法快速入门第十二天之「动态规划」
题目二:198. 打家劫舍题目描述:题目分析:题解代码:题目三:120. 三角形最小路径和题目描述:原创 2022-10-10 12:30:23 · 169 阅读 · 0 评论 -
十四天算法快速入门第十一天之「递归 / 回溯」
目录题目一:77. 组合 题目描述:题目分析:题解代码:题目二:46. 全排列 题目描述:题目分析: 题解代码:题目三:784. 字母大小写全排列 题目描述: 题目分析:题解代码: 题目二:46. 全排列 题目描述:题目三:784. 字母大小写全排列 题目描述:原创 2022-10-04 23:40:18 · 126 阅读 · 0 评论 -
十四天算法快速入门第十天之「递归 / 回溯」
目录题目一:21. 合并两个有序链表 题目描述:题目分析:题解代码: 题目二:206. 反转链表题目描述:题目分析: 题解代码: 题目二:206. 反转链表题目描述:原创 2022-10-02 18:40:45 · 252 阅读 · 0 评论 -
十四天算法快速入门第九天之「广度优先搜索 / 深度优先搜索」
时,也就是当前位置在ret内记录的距离大于上一步的位置在ret内记录的距离时,,保证为最短距离,每一个位置拓展完后再出队即可。ret数组记录mat数组里每个数到0的最短距离。,以此类推,最后再判断有无新鲜的橘子即可。这题运用BFS可以求解,我们可以先创建一个。取上一步的位置在ret内记录的距离再+1。对mat中的每一个0依次入队。经典BFS问题,先将所有。(不小于m*n),接着。,再逐一将其上下左右。原创 2022-09-29 11:22:16 · 290 阅读 · 0 评论 -
十四天算法快速入门第八天之「广度优先搜索 / 深度优先搜索」
首先是判断两种指向NULL的情况,树为空或者节点无孩子。其次再进行孩子节点next指针的连接,详细过程见代码注释。这里我们将一棵二叉树合并到另一棵上即可,详细过程见代码注释。原创 2022-09-17 12:43:14 · 142 阅读 · 0 评论 -
十四天算法快速入门第七天之「广度优先搜索 / 深度优先搜索」
这题使用深度优先遍历的方法,先考虑边界等问题,再进行遍历并记录遍历过的岛屿,最后求岛屿的最大面积即可。这题运用深度优先遍历(广度也可)即可求解,先判断停止遍历的情况,再进行深度优先遍历即可。原创 2022-09-14 13:56:38 · 148 阅读 · 0 评论 -
十四天算法快速入门第六天之「滑动窗口」
即可,对于会有连续的字符串相同但字符顺序不同的情况,使用。1 位,使得 j - i + 1 (即当前。这题的方法是运用双指针滑动窗口,先用一个。这题我们使用 s1 的字符串在 s2 里。记录字符串每个字符的出现次数。...原创 2022-08-29 11:03:34 · 160 阅读 · 0 评论 -
十四天算法快速入门第五天之「双指针」
目录题目一:876. 链表的中间结点 题目描述:题目分析:题解代码:题目二:19. 删除链表的倒数第 N 个结点 题目描述:题目分析:题解代码: 题目二:19. 删除链表的倒数第 N 个结点 题目描述:...原创 2022-07-05 12:14:30 · 99 阅读 · 1 评论 -
十四天算法快速入门第四天之「双指针」
题目二:557. 反转字符串中的单词 III题目描述:原创 2022-06-23 17:37:59 · 376 阅读 · 0 评论 -
十四天算法快速入门第三天之「双指针」
目录题目一:283. 移动零 题目描述:题目分析:题解代码:题目二:167. 两数之和 II - 输入有序数组 题目描述:题目分析:题解代码: 题目二:167. 两数之和 II - 输入有序数组 题目描述:原创 2022-06-16 18:54:29 · 97 阅读 · 0 评论 -
十四天算法快速入门第二天之「双指针」
文章目录题目一:977. 有序数组的平方题目描述: 题目分析:题解代码:题目二:189. 轮转数组题目描述:题目分析:题解代码:题目二:189. 轮转数组题目描述:我们用示例1为例子来展现这个方法:...原创 2022-06-10 18:07:19 · 139 阅读 · 0 评论 -
十四天算法快速入门第一天之「二分查找」
写在前面:本文题单均来自力扣的算法刷题计划,开这个系列主要是以题目与题解的形式对一些常见、常用算法进行归类和总结,希望在促进自己学习的同时也能帮助到看到这篇文章的大家。另外,本文并非一天一更~...原创 2022-06-04 11:44:05 · 212 阅读 · 5 评论 -
经典贪心问题之圣诞老人的礼物
目录题目信息:题目分析:题解代码:题目信息: 注:4指一共有四箱糖果,15指雪橇共能带走的最大重量为15,接下来输出4行,每行两个数据,第一个数据指这箱糖果的价值,第二个数据指这箱糖果的重量。题目分析:这是一道很典型的贪心问题,因为要带走的糖果价值总和最大,且注意可以拆分成散装带走,也就是说当装了整箱糖果后,若剩下的空间不足以再装下一整箱糖果,可以拆分来装,固这题我们首先要求的就是每箱糖果价值与重量的比值,最大的先装,以此类推,到最后装不满一箱时再拆分。...原创 2022-05-27 21:22:24 · 659 阅读 · 0 评论 -
一篇文带你了解BFS迷宫问题
假如有这么一个迷宫,1代表可走的路,1以外的数字代表墙,这里墙就是2,那么我们从左上的星星标志出发,要走到右下方的星星标志处,最短要走多少步?这种类型的题目便可以使用BFS来解决,步骤共分三步,首先我们创建一个队列并让起点入队(此时起点便为队首元素);第一步:从队首元素处向它下一步能到达的上下左右四个方向拓展;第二步:将能走的地方分别入队(走过的便不再走);第三步:让队首元素出队(这时队列的第二个元素便成了队首元素);接下来重复一二三步即可,直到队列为空或者走到了终点便结束,此时记录原创 2022-05-18 17:07:40 · 597 阅读 · 6 评论 -
经典BFS问题之抓住那头牛(POJ3278)
运用BFS找出最优解即可。#include<iostream>#include<cstring>#include<queue>using namespace std;int n,k;const int maxn=100000;int visited[maxn+10]; //标记走过的路,去重struct step{ int x; //记录位置 int steps; //到x有多少步 step(int xx,int s):x(xx),...原创 2022-04-24 18:39:05 · 176 阅读 · 0 评论 -
经典递归问题之汉诺塔(c++解)
开门见山,题目如下:假设A上共有n个盘子,这个问题可以分解成先将n-1个盘子以C为中转从A移到B,再将1个盘子从A移到C,再以C作为中转,将n-1个盘子从B移到A,再反复执行上面的操作即可移走所有的盘子,由此写出以下代码。#include<bits/stdc++.h>using namespace std;void Hanoi(int n,char src,char mid,char dest)//n是A塔上盘子的数量,三个字符分别代表A、B、C{ if(n==1)//如果原创 2022-03-25 23:13:53 · 1552 阅读 · 3 评论 -
DFS问题之踩方格
#include <bits/stdc++.h>using namespace std;int visit[30][50];//用于记录走过的地方,最多只能走20步,所以数组足够int way(int i,int j,int n)//定义为从坐标(i,j)出发走n步的路线总数{ if(n==0)//走0步,视为一种路线——不走 return 1; visit[i][j]=1;//走过的地方记为1 int sum=0;//记录路线数 if(visit[i+1][j]==0...原创 2022-04-05 23:24:26 · 301 阅读 · 0 评论 -
经典DFS问题之城堡问题
一道深搜的题目,代码如下,思路已经详细注释在里面了。#include<bits/stdc++.h>using namespace std;int r,c;//行,列int rooms[60][60];//记录房间的墙的情况int color[60][60];//用于给已经走过的房间标号,且连通的房间标同一种号int maxroomarea=0,roomnum=0;//某区域的最大连通房间数和某区域连通房间的号码(每多一块区域号码加1)int roomarea;...原创 2022-04-05 18:06:14 · 271 阅读 · 2 评论 -
最长上升子序列(c++图文详解)
这题思路是这样,假设这个序列长度为n,存在数组a中,maxlen[i]表示以第i个数为终点的最长上升子序列的长度,它被初始化为1,因为一开始单个字符的最长上升子序列都是1(它自己),我们先用一个循环i遍历这个序列,i从2(序列的第2个字符)开始一直加1加到n,表示求以第i个数为终点的最长上升子序列的长度,然后同时在这个循环下再来一个循环j,j从1开始加1一直加到i-1为止,表示以第j个数为终点的最长上升子序列。只要出现a[i]>a[j]的情况,maxlen[i]=max(maxlen[i],max..原创 2022-04-01 19:29:40 · 6563 阅读 · 3 评论 -
最长公共子序列(c++)
先解释一下第一组序列为什么输出4,因为abcfbc和abfcab里的最长的公共子序列是abcb,注意可以跳着找,所以输出4。代码如下,也已经在poj通过了。#include <bits/stdc++.h>using namespace std;char a[1000];char b[1000];int maxlen[1000][1000]={0};//maxlen[i][j]表示第一个序列的前i项与第二个序列的前j项的最大公共子序列的长度int main(){...原创 2022-03-31 15:49:01 · 2821 阅读 · 0 评论 -
Floyd算法解决蓝桥公园问题
#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 550;int dis[N][N];void Floyd(int n){ for(int k = 1 ; k <= n ; k ++) { for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) dis[i...原创 2022-04-06 18:32:11 · 343 阅读 · 2 评论 -
经典前缀和+差分问题之小明的彩灯(c++)
这题是一道简单的一维前缀和+差分的问题,首先我们了解一下前缀和,比如一个数组1,2,3,4,5,6;那么它的前缀和数组就是1,3,6,10,15,21;也就是说前缀和数组第n个数是原数组的前n项和,同时原数组也叫这个前缀和数组的差分数组。如果我们将这个前缀和数组的前5项(共6项)都加上1,变成2,4,7,11,16,21;那它的差分数组就是2,2,3,4,5,5;相当于1,2,3,4,5,6的第1项加1,第6项减1。所以我们每次让某个数组的第i和第j+1项这两项都加或减去某个数x,再求前缀和..原创 2022-03-29 22:10:55 · 1017 阅读 · 0 评论 -
递归解决N皇后问题(C++)
#include<bits/stdc++.h>using namespace std;int queenPos[100];//用于存放算好的皇后的位置,左上角是(0,0)int N;void NQueen(int k);int main(){ cin>>N; NQueen(0);//从第0行开始摆皇后 return 0;}void NQueen(int k)//在0~k-1行皇后已经摆放好后,摆放第k行及其后面的皇后{ int i;...原创 2022-03-03 21:50:17 · 554 阅读 · 0 评论 -
快速幂解法:数的幂次(c++)
题目描述给定三个正整数 N,M,P,求 N^M mod p。输入描述第1行为一个整数T,表示测试数据数量。接下来的T行每行包含三个正整数 N,M,P。1≤T≤10^5 1≤N,M,P≤10^9。输出描述输出共T行,每行包含一个整数,表示答案。输入输出样例示例 1输入32 3 74 5 65 2 9输出147快速幂核心公式(a * b) % p = (a % p * b % p) % p直接上代码#include..原创 2022-03-17 23:28:22 · 761 阅读 · 1 评论 -
递归解决逆波兰表达式
题目是读入一个逆波兰表达式,并计算其值是多少。代码:#include<bits/stdc++.h>using namespace std;double exp(){ char s[20]; cin>>s; switch(s[0]) { case'+': return exp()+exp(); case'-': return exp()-exp(); case'*': return exp()...原创 2022-03-05 10:23:45 · 172 阅读 · 0 评论