算法
文章平均质量分 66
追梦少年ML
程序改变世界,代码成就未来。
展开
-
数据结构习题
深度优先遍历(DFS)&&广度优先遍历(BFS)(1)单词接龙(2)单词接龙2(3)岛屿数量(4)扫雷游戏(5)二叉树的层次遍历(6)最小基因变化(7)括号生成(8)在每个数行中找最大值贪心算法(1)柠檬水找零(2)分发饼干(3)模拟行走机器人(4)跳跃游戏(5)买卖股票的最佳时机(6)买卖股票的最佳时机2二分查找(1)x的平方根(2)有效的完全平方数(3)旋转数组的最小数字(4)搜索旋转排序数组(5)搜索二维矩阵...原创 2021-04-03 23:27:27 · 96 阅读 · 0 评论 -
字典树(Trie树)
基本结构:字典树,即Trie树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高。基本性质:1.结点本身不存完整单词。2.从根到某一结点,路径上经过的字符连接起来,为该结点对应的字符串。3.每个结点的所有子结点路径代表的字符都不相同。...原创 2021-04-03 23:26:55 · 141 阅读 · 0 评论 -
最长公共子序列和最长回文子序列
最长公共子序列最长回文子序列首先问一下大家,如何判断一个字符串是否是回文串?一个很简单的想法就是一个字符串和它的逆序字符串是否相等。而求最长公共子序列大家都会求,如何求最长回文子序列呢?一个解法是求该字符串和它的逆序字符串的最长公共子序列。有了这个解法,则求最长回文子序列和求最长公共子序列不是一样的简单吗。嘿嘿。最长公共子序列的解法:看到让求最长公共子序列,就要想到动态规划。首先声明一个二维数组dp,dp[i][j]的含义是当s1的前 i 位和s2的前 j 位的最长公共子序列的长度。所以状态转移方程原创 2021-04-03 23:25:49 · 297 阅读 · 0 评论 -
验证二叉树的前序序列化
题目链接题目:序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为一个表示 null 指针的 ‘#’ 。你可以认为输入格式总是有效的,例如它永远不原创 2021-03-15 22:35:32 · 106 阅读 · 0 评论 -
回溯法及其经典例题
引言:回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。经典例题1:二叉树中和为某一值的路径输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节...原创 2020-04-07 21:49:53 · 3285 阅读 · 0 评论 -
分治法及经典例题
分治法的基本思想将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法的求解过程:①划分:将整个问题划分为多个子问题,子问题与原问题有相同的类型。②求解:求解各个子问题(可以使用递归反复调用)③合并:合并所有子问题的解,形成原问题的解。分治算法经典例题1:求数组中的最大最小值#include<iostream>using namesp...原创 2020-04-05 15:17:20 · 7298 阅读 · 0 评论 -
贪心算法及其经典例题
有一类问题,它有n个输入,而它的解就是这n个解的某个子集,这些子集必须满足某些先给定的条件。贪心方法是指在对问题求解时,总是做出在当前看来是最好的选择。...原创 2020-04-04 23:45:03 · 2564 阅读 · 0 评论 -
动态规划及其动态规划经典例题
引言:动态规划是最重要、最经典的算法之一,学好动态规划对我们十分重要,掌握动态规划对解决某些问题会起到事半功倍的效果。动态规划:特点:①可以把原始问题划分为一系列子问题②求解每个子问题仅一次,并将其结果保存到一个表中,以后用到时直接存取,不重复计算,节省时间。③自底向上地计算适用范围:原问题可以分为多个相关子问题,子问题的解会被重复使用。动态规划题目的特点:1.计数-有多少种...原创 2020-04-04 12:33:50 · 998 阅读 · 0 评论 -
全面理解动态规划的背包问题
引言:背包问题始终贯穿着学习算法的全过程,学会并且能够学以致用背包问题尤为重要。问题描述:给定n个物品的重量及效益,给定背包的容量。求背包能装的最大效益值,及最大效益值时装入背包的物品编号。题解:dp[i][j] i表示考虑前i个物品,j代表当前背包的容量为j。所以如果当前背包不能装下第i个物品,那么dp[i][j]=dp[i-1][j],说明背包容量为j时,考虑前i个物品和考虑前i-...原创 2020-04-04 12:31:13 · 309 阅读 · 0 评论 -
约瑟夫环问题即多种解法
问题引言:约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。首先,当学习过约瑟夫环问题后,我向大家推荐一道力扣上的题目圆圈中最后剩下的数字,大家可以拿这道题来练练手。力扣上的题目描述:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这...原创 2020-03-31 15:26:18 · 1157 阅读 · 0 评论 -
自动扫雷三(图形界面)
经过前两问的算法,已经实现了自动扫雷的基本算法,下面就剩下图形界面和接口了,下面就是实现自动扫雷的程序。接口在CbuttonView.cpp文件中。下面就是程序文件的百度网盘链接百度网盘链接提取码:cwui展示:点击游戏下面栏目中的自动扫雷即可完成扫雷。...原创 2020-03-27 22:07:10 · 309 阅读 · 0 评论 -
自动扫雷二(智能扫雷实现)
题目:请继续编写程序,帮助(替代)玩家自动扫雷,用尽可能少的步数最快完成扫雷。请注意, 作为玩家,你的程序并不知道地雷的实际位置。本小题无需编写整个程序,只需实现如下函数:void machine(int GamePanel[30][30], int n, int m, int &x, int &y);该函数功能为读入当前游戏界面,并给出决策结果,即在当前游戏界面下,下一步应...原创 2020-03-27 21:45:13 · 767 阅读 · 0 评论 -
自动扫雷一(扫雷OJ题)
输入输入第一行是4个整数n、m、k和l,含义如题干所述。接下来k行,每行2个数字i和j,表示每个雷的坐标,即雷在第i行第j列的格子里。接下来l行,每行2个数字i和j,表示用户点击信息,即用户点击了第i行第j列的格子。(m, n, i, j不超过20;k不超过50,l不超过200)输出对于用户的每个点击信息:(1)如果用户点击的格子是已被打开的格子,则点击无效,忽略该点击。(2)如果点击的格子...原创 2020-03-27 21:10:38 · 1192 阅读 · 3 评论 -
A*寻路算法
前言:(好好看完哦,后面有惊喜~~)A寻路算法在游戏和导航等软件中广泛应用。A寻路算法是一种启发性寻路算法,是一种高效的寻路算法。题解:A*寻路算法的思想:启发性搜索:公式:f=g+h;用来衡量效率的一个数字:代价小(距离短),代价大(距离远)。f:当前点到终点的代价g:起点到当前点的代价h:当前点到终点的预估代价因为我们可以走直线也可以走斜线,所以我们定义走直线的代价为10...原创 2020-03-18 18:58:27 · 521 阅读 · 0 评论 -
二分检索(分治法)
二分检索分治法的思想就是把整个问题分成若干个小问题后分而治之。①通常情况下,子问题与原问题具有相同的类型。②可以反复使用分治策略,直到可以直接求解子问题为止。③适合采用递归过程来表示。题解:在一个有序数组中查找元素,采用二分查找。找到数组的中间位置的元素a[(low+high)/2],如果要找的元素比它大,则把low更新为(low+high)/2+1;如果要找的元素比它小,则把hig...原创 2020-03-09 21:07:11 · 1224 阅读 · 0 评论 -
棋子的移动问题(递归问题)
棋子的移动问题题目描述:有2n个棋子(n>=4)排成一行,白子用0表示,黑子用1表示,例如n=5时初始状态为0 0 0 0 0 1 1 1 1 1 _ _ (右边至少有2个空位),要求通过棋子移动最终成为 _ _0 1 0 1 0 1 0 1 0 1 .棋子移动规则:1.每次必须同时移动相邻的两个棋子。2.颜色不限,移动方向不限。3.每次移动必须跳过若干棋子。4.不能调换这两个...原创 2020-03-01 23:03:04 · 1934 阅读 · 0 评论 -
hanoi塔问题(递归问题)
hanoi塔问题引言:hanoi塔问题是比较经典的递归问题,很多学生从大一开始学习c语言递归时都或许会碰到这个问题,但很多同学一开始都是一知半解的,现在我来领大家一起重新学习一下hanoi问题,让我们一起对递归函数有更好的理解。题解:设n为hanoi塔的盘子的数量。A,B,C是三根支柱,hanoi()函数要求将所有的盘从A借助B移动到C。当n为1时,那么就是直接从A柱移动到C柱。当n为...原创 2020-03-01 21:44:02 · 1040 阅读 · 0 评论 -
0/1背包问题(递归求解)
0/1背包问题0/1背包问题是十分常见的算法,下面我就是我对此问题的分析。引言一想到0/1背包问题,首先会想到用递归求解。但此问题的递归不像数学公式中的递归那么简单。首先是此问题的分支比较多,需要判断背包的容量是大于、小于还是等于当前物品的重量。其次就是,普通的递归只对一个对象的规模变小,而此问题要对两个对象的规模都变小。题解令a[]为各个物品的重量,m为背包容量,n表示第n个物品 。从...原创 2020-03-01 21:43:38 · 7419 阅读 · 0 评论