
算法学习笔记
算法学习笔记,内容比较基础
dzydzy7
这个作者很懒,什么都没留下…
展开
-
Leetcode初级算法卡片中的动态规划
爬楼梯70假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?**注意:**给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解法:class Solution { int原创 2020-06-02 22:11:47 · 298 阅读 · 0 评论 -
leetcode完全平方数(BFS)
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.class Solution {public: int numSqu...原创 2018-11-25 19:21:22 · 1119 阅读 · 0 评论 -
leetcode打开转盘锁(BFS)
你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮...原创 2018-11-25 19:09:25 · 1573 阅读 · 0 评论 -
leetcode岛屿的个数(BFS)
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3#include <iostr...原创 2018-11-25 18:50:19 · 843 阅读 · 0 评论 -
一元二次方程
#include <iostream>#include <cmath>using namespace std;double max(double a, double b) { return (a > b) ? a : b; }double min(double a, double b) { return (a > b) ? b : a; }int ...原创 2018-05-30 23:02:24 · 165 阅读 · 0 评论 -
反转后i的字符串排序
描述输入n个字符串,对这n个字符串(按反转后字典序)排序并输出。例如两个字符串为“aab”, “cba”,则“cba”应该排在“aab”之前,因为“cba”反转后为“abc”,”aab”反转后为”baa”。输入第一行为一个整数n,表示字符串的数目。(0<n<50)接下来是n行,每行一个字符串,其中字符串仅由小写字母组成,每个字符串长度不超过100,所有字符串均不相同。输出排完序以后的字...原创 2018-05-30 23:06:46 · 696 阅读 · 0 评论 -
回文串排序
描述输入n个字符串,将其中是回文串的字符串,按照长度从小到大的顺序输出,如果长度相同,则按照输入的顺序输出即可。回文的含义是:正着看和倒着看相同,如abba和yyxyy。输入第一行首先是一个整数n(n<50),表示有n个字符串(每个字符串的都长度小于100)。接下来有n行,每行输入一个字符串。输出按照长度从小到大的顺序输出其中的回文串,如果长度相同,则按照输入的顺序输出。样例输入14abb...原创 2018-05-30 23:04:03 · 1375 阅读 · 0 评论 -
活动安排问题(贪心法)
求最多容纳的活动数#include<cstdio>#include<algorithm>using namespace std;struct Contest{ int begin; int end;};Contest contests[1000];bool compare(Contest a, Contest b){ return a.end <...转载 2018-04-30 15:43:10 · 304 阅读 · 0 评论 -
算法笔记之深度优先搜索(迷宫问题)
//迷宫问题的最短路径#include <iostream>using namespace std;int n, m, p, q, min = (1 << 31) - 1;//地图有m行n列, 需要到(p, q)int a[51][51]; //0为空地,1为障碍物bool book[51][51]; //未走过为false,走过为truevoid dfs(...原创 2018-08-14 21:14:43 · 706 阅读 · 0 评论 -
算法笔记之深度优先搜索(全排列)
//求1~n的全排列#include <iostream>using namespace std;int n = 1;int a[10];bool book[10]; //未放入为假,放入为真,因为默认为falsevoid dfs(int step) { if (step == n + 1) { //全都放完后输出 for (int i = 1; i <= n...原创 2018-08-14 19:38:57 · 671 阅读 · 0 评论 -
算法笔记一之快速排序
#include<iostream>using namespace std;int arr[100];void QSult(int left, int right){ int mid, l, r, temp; if (left > right)return;//判断异常情况 l = left; r = right; while (l!=r) { whil...转载 2018-07-15 19:24:11 · 176 阅读 · 0 评论 -
斐波那契数列(递归和动态规划)
#include <iostream>using namespace std;int fibonacci(int n) //递归 明显很慢{//第43项一秒,67项一天,92项三世纪 return (n < 2) ? n : fibonacci(n - 1) + fibonacci(n - 2);}long long fib(int n) //动态规划{ lon...原创 2018-05-22 21:50:01 · 244 阅读 · 0 评论 -
递归分治减治学习笔记
#include <iostream>using namespace std;template <typename T>T sum(T arr[], T n)//减治求和{ return (n < 1) ? 0 : sum(arr, n - 1) + arr[n - 1]; //递归求解加号前面的表达式}template <typename ...原创 2018-05-21 23:56:38 · 282 阅读 · 0 评论 -
简单递归(最大公约数,阶乘)
#include <iostream>using namespace std;int gcd(int m, int n) { return (n == 0) ? m : gcd(n, m%n);}//最大公约数long long fac(int n) { if (n == 0) return 1; else return n*fac(n - 1);}//阶乘...原创 2018-04-30 15:38:21 · 289 阅读 · 0 评论 -
素数判定
//素数判定#include <iostream>using namespace std;bool is_prime(int n){ if (n <= 1)return false; int m = floor(sqrt(n) + 0.5);//floor为向下取整 for (int i = 2; i <= m; i++) if (n%i == 0)re...原创 2018-04-30 14:04:38 · 145 阅读 · 0 评论 -
计算组合数 C(下n上m)=n!/(m!(n-m)!)
#include <iostream>using namespace std;long long factorial(int n){ long long m = 1; for (int i = 1; i <= n; i++) m *= i; return m;}long long C(int n, int m){ return factorial(n)...原创 2018-04-30 13:52:08 · 33053 阅读 · 2 评论 -
bjfuoj最长上升子序列和最长公共子序列(动态规划)
描述ben和mei在做一个项目。现在他们遇到了一个难题,需要你的帮助。问题可以抽象为,给定两个整型数串,求它们的最长公共子序列。最长公共子序列的定义是,一个数列 S ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。输入输入包含多组测试数据,每组数据首先包含一个N和一个M,分别表示两个整型串的长度,接下来是两行数据,分别有N个和M个整数(...转载 2018-06-10 16:44:34 · 870 阅读 · 0 评论 -
bjfuoj拾宝和C.yi的书包(动态规划)
描述如图所示,有一个群岛,共分为若干层,第1层有一个岛屿,第2层有2个岛屿,......,第n层有n个岛屿。每个岛上都有一块宝,其价值是一个正整数(图中圆圈中的整数)。寻宝者只允许从第一层的岛屿进入,从第n层的岛屿退出,不能后退,他能收集他所经过的所有岛屿上的宝贝。但是,从第i层的岛屿进入第i+1层的岛屿时,有且仅有有2条路径。你的任务是:对于给定的群岛和岛上宝贝的价值,计算一个拾宝者行走一趟所能...转载 2018-06-10 15:06:55 · 418 阅读 · 0 评论 -
bjfuoj报数游戏和读书时间(二分)
描述蒜头君在和他的朋友们一起玩一个游戏。由于蒜头君的机智,这个游戏由蒜头君担任裁判。首先,蒜头君会给他们一人一个编号,并且每个人的编号都不相同。接下来的每一回合,蒜头君会给一个数,编号不超过它的最大编号的人要报出自己的编号。如果没有人的编号比蒜头君给出的数要小,那么编号最小的人要报出自己的编号。每个人可以重复报号。蒜头君会按照一个列表顺次报出每个回合的数,他的朋友们想知道每回合报出的编号应该是多少...原创 2018-06-09 14:28:02 · 422 阅读 · 0 评论 -
bjfuoj最长连续和(动态规划)
描述给一个长度为n的序列A1,A2,...,An,求最大连续和,也就是要求找到一个i和j,使1<=i<=j<=n且Ai+...+Aj尽可能大。输入输入的第一行为一个整数T(1<=T<=20),表示数据组数。接下来是T组测试数据,每组数据分两行,第一行是一个整数n(1<=n<=100000),第二行为n个整数,每个整数的范围是[-2^31,2^31-1]。输...原创 2018-06-05 22:08:04 · 579 阅读 · 0 评论 -
bjfuoj小A回文数和拆除土墙
描述最近小A在研究一个数学问题。如果一个数n,它的二进制数和十进制数是回文数(例如1001,66,64446都是回文数),那么小A就把它命名为小A回文数。但是小A想知道,如果给定两个数n和m,它们之间有哪些数是小A回文数呢?(1<=n<=m<=10^6)输入输入包含多组,每组测试数据包含两个整数n,m,其中1<=n<=m<=1000000输出对于每一组测试数据,...原创 2018-06-05 20:16:29 · 387 阅读 · 0 评论 -
bjfuoj加法问题
描述给定正整数n,判断是否存在两个正整数a和b满足以下条件:①a+b=n;②a和b的位数一样;③a和b的所有位的数字都不一样。如当n为6912时,a和b可以是1234和5678,也可以是5869和1043;当n为1239时,a和b可以是986和253。输入输入包含多组测试数据。每组输入仅一个正整数N(N<1000000)。输出对于每组输入数据,如果存在满足条件的a和b,请在一行内输出"YES...原创 2018-06-05 18:12:42 · 863 阅读 · 0 评论 -
bjfuoj质数因子和公司营收
描述为了帮助大家走进算法的奇幻世界,fudq 决定先出道简单题考考大家:给出一个正整数 N,按从小到大的顺序输出它的所有质数的因子。例如 N = 180,它的质数因子分别为 2、2、3、3、5。输入有多组测试数据,每组数据输入一个正整数 N (2 <= N <= 1000000)。输出对应每组输入,输出一行,按从小到大顺序输出每个正整数 N 的所有质数因子,每两个数之间有一个空格,最后...原创 2018-06-01 22:18:53 · 406 阅读 · 0 评论