数据结构与算法
庾信平生最萧瑟
坎坷之路 终抵星空
展开
-
LeetCode 79. 单词搜索
原题目:https://leetcode-cn.com/problems/word-search/思路:简单的回溯算法,开一个数组记录访问过得节点代码:class Solution { bool flag=false; void dfs(vector<vector<char>>& board,string& word,vector<vector<int>>& v,int x,int y,in..原创 2020-09-27 18:45:32 · 86 阅读 · 0 评论 -
LeetCode 60. 第k个排列
原题目:https://leetcode-cn.com/problems/permutation-sequence/思路:康拓展开代码:class Solution {public: string getPermutation(int n, int k) { vector<char> chs={'1','2','3','4','5','6','7','8','9'}; const int factor[]={1,1,2,6,24,120,720,5040..原创 2020-09-27 18:19:09 · 116 阅读 · 0 评论 -
LeetCode 235. 二叉搜索树的最近公共祖先
原题目:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/思路:利用二叉搜索树的性质代码:class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root->val > p->va..原创 2020-09-27 17:13:34 · 120 阅读 · 0 评论 -
LeetCode 501. 二叉搜索树中的众数
原题目:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/思路:对BST采用中序遍历,如果当前节点的值不等于前一节点的值,那么就对其进行判断,看看前一节点值得次数是否大于了maxn。分情况进行处理。细节:记得对中序遍历的第一个节点做初始化,中序遍历的最后一种节点在递归过程中是不会进行判断的(因为其后面没有节点和他进行比较),所以在main函数中,要对这一情况做单独的判断。代码:class S..原创 2020-09-25 14:05:24 · 88 阅读 · 0 评论 -
差分进化算法
1 简介最优化方法分为传统优化方法和启发式方法,传统的优化算法大多数都是利用目标函数的导数求解,而启发式优化方法以放生算法为主,通过启发式搜索策略实现求解优化,启发式搜索算法不要求目标函数连续,可微等信息,具有较好的全局寻优能力。是一种用于最优化问题的后设启发式算法,本质上是一种基于实数编码的具有保优思想的贪婪遗传算法。在AI领域,演化算法是演化计算的一个重要分支,基于群体的元启发式优化算法,具有自适应、自搜索、自组织和隐并行性等特点。目前演化算法广泛应用于求解无约束函数优化、约束函数优化、组合原创 2020-09-24 15:10:41 · 562 阅读 · 0 评论 -
根据后序和中序输出前序
题目:本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:Preorder: 4 1 3 2 6原创 2020-05-15 11:37:30 · 520 阅读 · 0 评论 -
vector查找元素
vector查找元素导入:#include<algorithm>vector<int> a;a.push_back(1);a.push_back(2);a.push_back(3);if (find(a.begin(),a.end(),3) != a.end()) cout<<3<<endl;原创 2020-05-08 20:13:04 · 318 阅读 · 0 评论 -
vector元素的求和
vector元素的求和使用accumulate方法.一定要写:#include<numeric>vector<int> a;a.push_back(1);a.push_back(2);a.push_back(3);int sum = accumulate(a.begin(),a.end(),0);原创 2020-05-08 20:07:10 · 10872 阅读 · 3 评论 -
string里面的find函数
string里面的find函数string.find()成功则会返回一个比string.nops小的数。否则返回大于等于string.nops的数 string s = "asdfghjkl";if(s.find("g") < s.npos){ printf("true");}else{ printf("false");}//out:true...原创 2020-05-08 20:02:51 · 167 阅读 · 0 评论 -
两数之和的计算方法
计算两数之和的四种方法1、采用第三方参数t = a a = bb = t2、两数之和a = a + bb = a - ba = a - b3、两数之积(原理和两数之和相同)a = a * bb = a / ba = a / b4、采用异或符号a = a ^ bb = a ^ ba = a ^ b异或符号是很重要的符号,数字在计算机...原创 2019-09-26 09:18:07 · 4104 阅读 · 0 评论 -
KMP字符串匹配
KMP字符串匹配给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为...原创 2020-05-06 15:47:41 · 421 阅读 · 0 评论 -
排序-Sort with Swap(0, i)
Sort with Swap(0, i)Given any permutation of the numbers {0, 1, 2,...,N−1}, it is easy to sort them in increasing order. But what ifSwap(0, *)is the ONLY operation that is allowed to use? For ex...原创 2020-04-21 18:48:59 · 176 阅读 · 0 评论 -
PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. This time you are supposed to generate the ranklist for PAT.Input Specification:Each input file co...原创 2020-04-21 17:44:02 · 152 阅读 · 0 评论 -
各类排序的代码实现-归并、堆、冒泡、希尔、插入
各类排序的代码实现-归并、堆、冒泡、希尔、插入给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:数据1:只有1个元素; 数据2:11个不相同的整数,测试基本正确性; 数据3:103个随机整数; 数据4:104个随机整数; ...原创 2020-04-16 17:22:24 · 116 阅读 · 1 评论 -
How Long Does It Take - 图(AOE)
How Long Does It TakeGiven the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.Input Specification:Each input file contains one...原创 2020-04-13 17:42:41 · 541 阅读 · 0 评论 -
哈希表处理冲突的方法
哈希表处理冲突的方法原创 2020-03-24 17:01:36 · 188 阅读 · 0 评论 -
散列函数的构造方法
散列函数的构造方法原创 2020-03-24 16:46:02 · 241 阅读 · 0 评论 -
最短路径 -- Floyd算法
最短路径 -- Floyd算法弗洛伊德算法可以求出每两个点之间的最短路径,不需要调用n次地杰斯特拉,算法的核心代码是:for (int k=0;k<v;k++) for(int i=0;i<v;i++) for (int j=0;j<v;j++) if(d[i][j] > d[i]...原创 2019-12-02 19:18:40 · 184 阅读 · 0 评论 -
递归--汉诺塔
递归--汉诺塔题目假设有abc三个轴,有n个直径不相同,从小到大依次编号的盘子(1,2,,,,n)按照上小下大的顺序放在a轴上,现要求将这n个盘子移动到c轴上,但是移动的时候要保证以下规则:每次只能移动一个盘子,他必须位于一个轴的顶部 圆盘可以插在abc任意一个轴上 任何时刻都不可以将一个大盘子放在小盘子上解题思路:典型的递归方法,我们有n个盘子在a,那么我们需要做的就是...原创 2019-12-01 16:52:35 · 130 阅读 · 0 评论 -
数论 - 唯一分解定理
唯一分解定理表述任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1 * P2^a2 * P3^a3 * ...... * Pn^an,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。应用:给出正整数n的唯一分解表达式,求n的正约数的个数由唯一分解表达式...原创 2019-12-01 09:49:52 · 719 阅读 · 0 评论 -
辗转相除法
辗转相除法辗转相除法的关键在于恒等式:gcd(a,b) = gcd(b,a%b) ,他和边界条件gcd(a,0)=a,一起构成了求最大公约数得欧几里得算法:int gcd( int a, int b){ return b == 0?a:gcd(b , a % b);}gcd函数的递归层数不会超过4.785*lg(n)+1.6723,...原创 2019-12-01 09:35:06 · 159 阅读 · 0 评论 -
动态规划-01背包问题
动态规划-01背包问题描述:有n中物品,第i个物品的质量为wi,体积为vi,背包的体积容量为c;使得背包内物品在总体积不超过c的前提下重量最大思路:典型的动态规划思想,在遇到第i个物品的时候,我们有两种情况,1、装入背包(装的下的前提下),那么f[i][j] = f[i-1][j]2、不装入背包,那么f[i][j] = f[i-1][j-v[i]] + w[i]所以状态...原创 2019-11-28 17:05:58 · 173 阅读 · 0 评论 -
贪心算法--乘船问题
贪心算法--乘船问题描述:有n个人,第i个人的重量为wi,每艘船的最大载重量为c;且最多只能成两个人,用最少的船装载所有的人;思路:选择最轻的人i,他应该选择能和他做一艘船的最重的一个人j一起坐船。这种方法是贪心的。那么我们用两个下标i和j,来表示当前最轻和最重的人如果重量和超过了容量,让j一个人坐船,j --。如果没超,让i和j做一艘船。i ++,j --。所以我们采...原创 2019-11-28 12:11:14 · 4624 阅读 · 0 评论 -
贪心算法--部分背包问题
贪心算法--部分背包问题描述:有n个物体,第i的物体的重量为wi,价值为vi,在重量不超过c的情况下让总价尽量的高,每一个物体可以支取一部分,价值和重量按比例计算思路:算出每个物体的单位价值(v/w),然后从大到小选择物品进行装包,由于物品可以部分装入,所以装完后背包的重量一定为c。代码:#include<iostream>#include<algor...原创 2019-11-28 11:44:02 · 694 阅读 · 0 评论 -
贪心算法--最优装载问题
贪心算法--最优装载问题描述:给出n个物体,第i个物体的重量为wi,选择尽量多的物体,使得总重量不超过c,输出装入物品的个数。思路:这是典型的贪心算法,只顾眼前,来得到我么的最优解,所以每次选择装入最轻的物体,(如果装的下)代码:#include<iostream>#include<algorithm>using namespace std...原创 2019-11-28 11:22:58 · 1365 阅读 · 0 评论 -
素数环
素数环题目输入正整数n,吧正整数1-n组成一个环,使得相邻两个整数之和均为素数,输出时从整数1开始逆时针排列,同一个环应恰好输出一次,n<=16,样例输入:6输出:1 4 3 2 5 6 1 6 5 2 3 4思想回溯算法代码#include<iostream>using namespace std;int vis...原创 2019-11-26 20:41:40 · 215 阅读 · 1 评论 -
n皇后问题
n皇后问题题目:输入皇后的个数n,输出所有皇后可能放置的位置,(不能同行,同列和同对角线)样例输入:4输入:2 4 1 3 3 1 4 2代码#include<iostream>using namespace std;// q用来存放位置,n是皇后的个数 int q[100],n;void search(int cur)...原创 2019-11-22 16:15:53 · 143 阅读 · 0 评论 -
枚举排列
枚举排列题目输入正整数n(表示要枚举元素 的个数),然后输入n个数,输出该n个数所有的排列,不允许有重复。样例样例1:输入:3 1 2 3输出:1 2 31 3 22 1 32 3 13 1 23 2 1样例2:输入:3 1 1 1输出:1 1 1解题思路:从字典序最小排列开始,不停的求下一...原创 2019-11-22 15:35:40 · 131 阅读 · 0 评论 -
二叉树的重建
二叉树的重建题目:给定二叉树的先序和中序序列,输出该二叉树的后续序列样例:样例1:输入:DBACEGF ABCDEFG输出:ACBFGED样例2:输入:BCAD CBAD输出:CDAB代码:#include<stdio.h>#include<string.h>using namespace std;void build(i...原创 2019-11-21 21:06:05 · 120 阅读 · 0 评论 -
果园里的树
果园里的树题目描述:果园里的树成矩阵排列,x,y坐标范围是(1,99)输入三个点的坐标,判断有多少树在三个点构成的三角形的内部和边界。样例:输入:1.5 1.5 1.5 6.8 6.8 1.5输出:15解题思路:用一种面积计算法,判断s == s1-s2-s3。相等说明在三角形的内部或边界。double area(double x0,double y0...原创 2019-11-11 20:20:57 · 144 阅读 · 0 评论 -
n的阶乘的素数因子
n的阶乘的素数因子题目:输入正整数n(2《=n《=100),那n!=1*2*3*****n,分解成素因子相乘的形势,从小到大输出各个素数的指数,例如825=3* 5**2 * 11应该表示成(0,1,2,0,1),分别表示有0个2,1个3,2个5,0个7,1个11。忽略比最大素因子更大的素数(否则末尾会有无穷多个0)样例输入:53输出:53! = 49 23 12 8 ...原创 2019-11-11 19:04:48 · 931 阅读 · 0 评论 -
蛇形填数
蛇形填数题目:输入n,输出n*n的矩阵,从矩阵的右上角,顺时针填入数字。样例:输入:4输出:10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4解题思路:每次都是:向下,向左,向上,向右,先把数组用0填充,终止条件:沿着个方向,下一步超过了数组的范围;或者下一步位置的数字不是0...原创 2019-11-11 18:05:25 · 111 阅读 · 0 评论 -
算法竞赛入门-排列
算法竞赛入门-排列题目描述:用1-9组成三个三位数,满足比例关系1:2:3,数字不可以重复,输出所有解解题思路:构造哈希数组来判断数字的使用情况#include<stdio.h>#include<string.h>int main(){ int abc, ghi, def; for( abc = 123; abc ...原创 2019-11-09 18:41:50 · 163 阅读 · 0 评论 -
输入正整数a,b,c,输出a/b,保留小数点后c位
输入正整数a,b,c,输出a/b,保留小数点后c位输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位,c《=100,a,b《=10**6输入样例:1 6 4输出:0.1667#include<stdio.h>int main(){ int a,b,c; scanf("%d %d %d",&a,&b,&c); p...原创 2019-11-09 18:19:21 · 7880 阅读 · 13 评论