算法刷题
各大算法网站的刷题
会写代码的孙悟空
长夜将至,我将开始守护chatGPT,直至永恒。我将不图安逸,不恋名利,不惧挑战。我将不拘泥于旧知,不追求虚荣。我将全力以赴,勇攀科学之巅。我是黑暗中的明灯,chatGPT的利剑。我是破除迷雾的火焰,照亮chatGPT未来的光辉,唤醒求知者的号角,守护chatGPT真理的坚盾。我将生命与荣耀献给chatGPT的研究,今日如此,日日皆然。
展开
-
C++滑动窗口求最大值问题(单调队列,multiset,分块dp)
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值。原创 2022-08-09 16:23:34 · 589 阅读 · 1 评论 -
leetcode210. 课程表 II 207. 课程表 拓扑排序 dfs bfs
拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。题目描述课程表 II现在你总共有 numCourses 门课需要选,记为 0 到 numCours原创 2022-05-24 15:38:42 · 193 阅读 · 0 评论 -
快速幂计算x的n次幂,递归版本、迭代版本、python实现
递归分治思想,二分def myPow(self, x: float, n: int) -> float: def quick_pow(x,n): if n==1: return x half=quick_pow(x,n//2) y=half*half if n%2==0 else half*half*x return y if n==0: return 1.0 if n&原创 2022-04-25 10:58:32 · 2501 阅读 · 0 评论 -
动态规划的动态转移方程怎么寻找,实例分析
动态规划初识动态规划算法:通过构建一系列子问题,求解部分子问题,然后通过子问题的依赖关系,求解出所有子问题,一般来说最后的那个子问题就是最终需要的答案。公式描述就是:构建子问题 p1,p2,p3,...pnp_{1},p_{2},p_{3},...p_{n}p1,p2,p3,...pn求解部分子问题 p1p_{1}p1状态转移p=f(pi−1)p_{}=f(p_{i-1})p=f(pi−1)得到答案result=pnresult=p_{n}result=pn动态规划算法的关原创 2022-04-04 11:09:05 · 1041 阅读 · 0 评论 -
11. 盛最多水的容器 (leetcode)
题目描述给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:height = [1,原创 2022-03-04 09:37:06 · 169 阅读 · 0 评论 -
正则表达式匹配中* . c++实现
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配整体思路从前向后迭代绝对不能匹配:返回false普通匹配:进入下一次迭代...原创 2019-11-06 15:11:01 · 625 阅读 · 0 评论 -
L2-001 紧急救援 (25 分)
#include<iostream>#include<vector>#define iIN(a,b) for(int i=a;i<b;i++)using namespace std;const int MAX=0xfffffff;int map[505][505];//存放路径信息//初始化 int rescue[505]; //救援队数量int ...原创 2019-05-08 22:45:54 · 914 阅读 · 0 评论 -
HDU1874 单源最短路经 dijkstra或者floyd
#include<iostream>using namespace std;int map[205][205]; //保存道路信息 int mark[205]; //mark[i]==1 代表城市i被标星int tolen[205]; //tolen[i]==x 代表起点城市到i城市的距离为x void init(int X)//把数组初始化 { for(...原创 2019-05-07 14:31:59 · 270 阅读 · 0 评论 -
L2-012 关于堆的判断 (25 分)
#include<iostream>#include<vector>#include<set>#include<string>#include<algorithm>#include<string.h>#include<sstream>#define iIN(x,y) for(int i=x;i<...原创 2019-05-23 18:07:11 · 426 阅读 · 0 评论 -
和为S的连续正数序列 两种思路
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-08-28 20:48:19 · 301 阅读 · 0 评论 -
数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据...原创 2019-08-28 18:24:36 · 300 阅读 · 0 评论 -
两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。分析这道题没有提环,所以假定链表没有环。我们可以先简化一下问题,假设两个相交链表长度相等,那么我们遍历链表一、二,一次走一步然后查看是否相等,相等的那个节点就是相交点。那么如果两个链表长度不相等,我们可以先让长度长的链表头向前走,看图。假如是pHead1长的话,就让它先走黄色线段那么长,然后pHead1、pHead2一起走...原创 2019-08-21 18:20:07 · 234 阅读 · 0 评论 -
丑数的求法
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。class Solution {public: int GetUglyNumber_Solution(int index) { if(index<=0)return 0...原创 2019-08-21 16:03:46 · 554 阅读 · 0 评论 -
二叉搜索树转换成一个排序的双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。注解:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它...原创 2019-08-12 08:26:48 · 572 阅读 · 0 评论 -
判断一个数组是不是某个二叉搜索树的后序遍历
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。后序遍历: 左右中 (数组最后一个值就是根节点值)二叉搜索树: 左值<中值<右值分析:遍历数组,第一个比中间节点大的值就是右子树的开始标志然后再判断 1、右子树值是否全部大于 根节点值 2、左序列、右...原创 2019-08-09 13:53:55 · 525 阅读 · 0 评论 -
链表反转
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};单向链表,第一个结点规定为头结点反转原理图示步骤1: 把旧链表头保存到nowNode里面步骤2: 删除旧链表第一个元素,也就是pHead指针指向第二个元素,pHead=p...原创 2019-08-08 08:33:50 · 317 阅读 · 0 评论 -
剑指offer——矩形覆盖问题
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路一:深度优先搜索,从(0,0)开始遍历,判断此格子情况,判断能否竖着放、横着放,把所有情况试探一遍。class Solution {public: int a[2][100]; int rectCover(int numbe...原创 2019-08-07 19:04:21 · 284 阅读 · 0 评论 -
两个栈实现队列C++
class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(!stack2.empty()) { int res=stack2.top(); stack2.pop()...原创 2019-08-06 19:23:24 · 257 阅读 · 0 评论 -
由树前序遍历、中序遍历构造树 c++
前序遍历 中左右(先访问根节点)中序遍历 左中右(中间访问根节点)前序遍历序列{1,2,4,7,3,5,6,8}中序遍历序列{4,7,2,1,5,3,8,6}分析: 前序遍历是中左右,所以第一个一定是根节点的值,根据这个值可以在中序遍历中找到左右子树的分割左子树的中序遍历 -> 4,7,2 1 5,3,8,6 <-右子树的中序遍历...原创 2019-08-06 19:10:03 · 373 阅读 · 0 评论 -
排序函数c++函数模板实现
冒泡排序、插入排序、选择排序、归并排序、快排、堆排序#include <iostream>using namespace std;template<class type> void arr_show(type arr[],int L,int R);template<class type> void sort_bubble(type arr[],in...原创 2019-07-31 21:22:09 · 1107 阅读 · 0 评论 -
c++求行列式的值(全排列法)
大一学线性代数时就想求,当时老想着用子行列式递归求,编不出代码。。。。。。现在用全排列的方式求了出来,递归体现在全排列中,上代码没有封装,f函数是求行列式的值得#include<iostream>#define iIN(x,y) for(int i=x;i<y;i++)#define jIN(x,y) for(int j=x;j<y;j++)u...原创 2019-07-22 18:05:16 · 4658 阅读 · 3 评论 -
PTA L2-010 排座位 (25 分)
#include<iostream>#include<cstdio>#include<algorithm>#define wIN(x,y) for(int w=x;w<y;w++)using namespace std;const double eps= 0.000001;int amount[10005];double income[10...原创 2019-05-20 22:15:36 · 999 阅读 · 0 评论 -
C++11 string与int转换
int num=stoi("4651");string str=to_string(1234);原创 2019-08-12 14:57:46 · 498 阅读 · 0 评论 -
PTA L2-008 最长对称子串 (25 分) 字符串处理
暴力循环,从j处向左右延伸,对称就继续延伸注意:对称有两种,abccba abcba#include<iostream>#include<string>#define jIN(x,y) for(int j=x;j<y;j++)using namespace std;int main(){ string s; getline(cin,s)...原创 2019-05-20 20:16:24 · 370 阅读 · 0 评论 -
蓝桥BASIC-18 矩形面积交 思路分析
问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。输入格式 输入仅包含两行,每行描述一个矩形。 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位。样例输入1 1 3 ...原创 2019-04-14 22:14:36 · 435 阅读 · 0 评论 -
蓝桥 BASIC-19 基础练习 完美的代价
#include<iostream>#include<cstdio>#include<string>using namespace std;string s;int main(){ int N; cin>>N; cin>>s; int blood; if(N%2==0)blood=0; else blood=1;...原创 2019-04-08 12:14:55 · 325 阅读 · 0 评论 -
蓝桥 BASIC-23
#include<iostream>#include<string>#include<cstdio>using namespace std;int xin[100][100];int main(){ int n; int one,zero; cin>>n; for(int i=0;i<n;i++) { for(int...原创 2019-04-06 23:16:09 · 280 阅读 · 0 评论 -
蓝桥 BASIC-25
#include<iostream>#include<string>#include<cstdio>using namespace std;int num[205][205];int vis[205][205];int arrow[4][2]={1,0,-1,0, 0,1,0,-1};//四个方向 int m,n...原创 2019-04-06 22:23:42 · 260 阅读 · 0 评论 -
蓝桥 BASIC-12 十六进制转八进制
分析:一个16进制数可以用4位二进制表示一个8进制数可以用3位二进制表示16进制向8进制转化就可以利用2进制数作为媒介例如:1B ->(一位变四位)00011011 ->(三位变一位)033 当然本题需要处理掉前导0#include<iostream>#include<algorithm>#include<vec...原创 2019-04-05 20:28:36 · 436 阅读 · 1 评论 -
蓝桥 BASIC-3
#include<iostream>using namespace std;int main(){ int n,m; cin>>n>>m; for(int i=0;i<n;i++) { for(int j=0;j<i && j<m;j++) { ...原创 2019-04-05 14:32:39 · 256 阅读 · 0 评论 -
蓝桥 BASIC-13
#include<iostream>#include<algorithm>using namespace std;int a[205];int main(){ int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(...原创 2019-04-05 14:09:49 · 374 阅读 · 0 评论 -
蓝桥 BASIC-2
#include<iostream>#include<bitset> using namespace std;int a[5];int main(){ //方法一 模拟一个加一的过程 从最低位开始加一 若此位为1 则变0 向高位进位 /*for(int i=0;i<32;i++) { for(int i=0;i<5;i++)cout&...原创 2019-04-04 18:09:18 · 353 阅读 · 0 评论 -
蓝桥 BEGIN-4 Fibonacci数列 取模
模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p a ^ b % p = ((a % p)^b) % p#include<iostream&...原创 2019-04-04 17:49:01 · 344 阅读 · 0 评论 -
蓝桥 BEGIN-3 圆周率π的取法 long double数据类型的使用
long double最多能表示15位小数(大概) 能表示的小数部分受整数部分的影响 也就是说long double数的整数位数+小数位数应为15位以下long double输入输出都用 %Lf格式化long double a;scanf("%Lf",&a); //cin>>a 也可以printf("%.7Lf",a); //四舍五入为7位小...原创 2019-04-04 17:40:21 · 586 阅读 · 0 评论 -
蓝桥杯 BEGIN-2 long long int的使用
#include<iostream>#include<cstdio>using namespace std;int main(){ long long int n;//注意n也需要为long long int型 long long int fi; cin>>n; fi=(1+n)*n/2; printf("%I64d\n",f...原创 2019-04-04 17:19:27 · 880 阅读 · 0 评论 -
筛选素数之欧拉筛法 python实现 附带证明
def oulashai(r): #返回小于r的素数列表 prime=[0 for i in range(r+1)] #全部初始化为0 common=[] #存放素数 for i in range(2,r+1): ...原创 2018-11-03 17:07:57 · 5246 阅读 · 4 评论 -
uva 101 vector+函数设计
vector c++中封装好的类 头文件 是线性表的顺序表示 简单而又实用 推荐掌握哦!Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。Constructors构造函数Op原创 2018-04-21 20:08:19 · 278 阅读 · 0 评论 -
kmp 算法代码 顺带聊聊string中length函数的坑处
注意length()函数返回的是unsigned integere.g 1 如果s.length()=100那么-1<s.length 这句话为假e.g 2 s.length-101是个很大的数,不是-1#include<iostream>#include<string>using namespace std;int jiakmp(string s1,string s...原创 2018-04-14 20:46:08 · 374 阅读 · 0 评论 -
HDU1166线段树
#include<iostream>#include<cstdio>#include<string>using namespace std;int num[50005];class Node{ public: int left,right; int sum; Node() { ...原创 2019-03-16 22:28:12 · 352 阅读 · 0 评论 -
hdu1029 简单用下stl的map
#include<iostream>#include<map>#include<cstdio>using namespace std;map<int,int> M;int main(){ int N; int x; int box; while(cin>>N) { M.clear(); for(int i...原创 2019-03-04 22:06:59 · 302 阅读 · 0 评论