![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 65
可惜我不会啊
这个作者很懒,什么都没留下…
展开
-
一些子经典算法
思路:把上面n-1个盘子放到辅助柱第n个盘子放到目标柱上递归放n-1个盘子 [此时 起始柱和辅助柱的为主]def hanoi(num,start,help,target): #如果只剩一个 直接转移 if num==1: print(start+"->"+target) else: #前n-1个全部移动到辅助柱原创 2022-02-17 17:32:05 · 141 阅读 · 0 评论 -
leetcode - 可能性_深度递归
文章目录括号神奇字符串括号题目解析n=3时,有3个"(" 和3个")"需要放到字符串中。从字符串为空时开始放入,只有两种可能放 “(” ,当剩余的 “(” 还有时放 “)” ,当剩余的 “(” < “)” 个数时len(str) = 2*n 时,填充完成def bracket(n): res=[] def dfs(str,left,right): if(len(str)==2*n): res.append原创 2022-02-17 17:31:28 · 118 阅读 · 0 评论 -
leetcode - 字符串
文章目录无重复最长子串最长回文子串切割字符串无重复最长子串思路滑动窗口的思路一个左移位置,一个右移动位置,一个map记录(字符,下标)当前[left,right]已有访问的字符判断是否需要左移: 看字符 是否在 字典中 ;存在则需要 清理该字符及其前面的字典键值把当前字符 放进 字典中,右移,i++;int lengthOfLongestSubstring(string s){ int left=0,max=0; unordered_map<char, int>原创 2021-09-06 22:53:08 · 66 阅读 · 0 评论 -
LeetCode-查找
深度遍历 + 回溯word searchword-search题目:给出一个二维字符数组和一个单词,判断单词是否在数组中出现,单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。例如:给出的字符数组=[↵ [“ABCE”],↵ [“SFCS”],↵ [“ADEE”]↵]单词 =“ABCCED”, -> 返回 true,单词 =“SEE”, ->返回 true,单词 =“ABCB”, -> 返回 false.分析二维数组(不清楚大小)原创 2021-07-10 16:28:46 · 188 阅读 · 0 评论 -
二叉树问题 + SLT
文章目录二叉树结构体生成树 : queue删除树深度遍历(VLR. LVR. LRV)具体内容递归非递归(栈 : LIFO)后序遍历 【233333】STL - stack广度遍历(层次遍历)非递归(队列:FIFO)STL queue二叉树结构体struct TreeNode(){ char data; TreeNode *left; TreeNode *right; TreeNode(char c){ data=c; left=right=NULL; }};生成树 : qu原创 2021-07-09 19:38:15 · 125 阅读 · 0 评论 -
子序列和问题
最大子序列和dp方法,联机法 【O(N)】记录 i 之前的所有和sum,保留前面i-1项中sum最大的值;当sum<=0时,证明前面的i-1项不会为后面带来增值,舍去。令sum=0,从 i 重新开始。int MaxSonString(int a[], int N){ int MaxSum=0; int tempSum = 0; int low=0,low2=0,high = 0;//记录位置,low2储存重新开始的位置 for (int i = 0; i < N; i+原创 2021-02-09 15:40:13 · 244 阅读 · 0 评论 -
求和输出问题_c++
文章目录整数拆分可能的种类数输出所有可能拆分的数据只能是数组A中的参考资料整数拆分动态规划问题之一一个数为N,求在数列0~m之间能相加为N的可能可能的种类数a[n][m]两个对立的可能性{dp[n−1][m−1]:存在1的情况(两边都减一,去除一个1)dp[n−m][m]:不存在1的情况a[n][m]两个对立的可能性\begin{cases}dp[n-1][m-1] : 存在1的情况(两边都减一,去除一个1)\\dp[n-m][m] : 不存在1的情况\end{cases}原创 2020-09-15 15:56:39 · 277 阅读 · 0 评论 -
背包问题_c++
文章目录0-1背包0-1背包dp[i][j]={max(dp[i−1][j],dp[i−1][j−weight[i]); weight[i]<=jdp[i−1][j]; weight[i]>jdp[i][j]=\begin{cases}max(dp[i-1][j],dp[i-1][j-weight[i]) ;~~weight[i]<=j \\dp[i-1][j] ;~~~weight[i]>j\\\end{cases原创 2020-09-15 00:51:53 · 108 阅读 · 0 评论 -
排列问题_c++
文章目录全排列算法暴力破解字典序利用STL的next_permutation()输出第M个序列该序列是第几个/第几N序列是什么数组之间的排列输出参考资料全排列算法暴力破解时间复杂度:O(n*n!) 【n个数的全排列有n!种,每一个排列都有n个数据】对一个数组进行全排列。可以看成当前这个a[0]-a[i]固定,对后面进行全排列,就完成了这个a[0]-a[i]的全部情况去重复:a[m]-a[i]之间出现过的数据,不再进行交换了,已经交换过//在 str 数组中,[m,i) 中是否有与 a[原创 2020-09-14 21:55:19 · 461 阅读 · 0 评论 -
整数拆分问题_C++
文章目录参考资料问题:给出2个整数n和k,请问如果将n分为k份,每份均不能为0,一共有多少种不同的分发。注:仅顺序不同视为同一种分发。DP[i][j]条件:n>=k;平均每份要给1。剩余n-k个则对于后面的排列:可以将其全部分到一份当中(dp[i-j][1]),也可以分到两份中(dp[i-j][2]),…,也可以分到 j 份中(dp[i-j][j]),而每一种分法都是不相同的,所以可以将其全部加起来,和即为dp[i][j]。【顺序不管】d[n][k]=d[n-k][1]+d[原创 2020-09-08 23:59:49 · 1183 阅读 · 0 评论 -
最长子序列/串问题
文章目录子序列与子串最长公共子串子序列与子串序列:可以不连续子串:联系###最长公共子序列LCS两个数组Array[][],计算长度,Array[i][j]={max(Array[i][j−1],Array[i−1][j]) ; Xi!=YjArray[i−1][j−1]+1 ; Xi==Yj0 ; i==0∣∣j==0 第一列/行初始为0Array[i][j]=原创 2020-09-08 17:02:47 · 74 阅读 · 0 评论 -
排序算法合集_c++
文章目录排序冒泡排序选择排序插入排序希尔排序归并排序快速排序功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入排序冒泡排序相邻数据之间比较,(从小往大时,)大的以后移动,一次遍历交换多次。void sort(string&原创 2020-09-07 21:24:05 · 109 阅读 · 0 评论