随笔分类 -  数据结构与算法

摘要:注意是在该子字符串内每个字符的出现次数都不少于k。可以采用分治的方法,函数找一个不符合条件的字符,然后将字符串分成两个子字符串,就这样进行递归运算,每次找到符合条件的子字符串就判断一波长度,然后将最长的长度值存下来。 #include<iostream> #include<bits/stdc++.h 阅读全文
posted @ 2024-02-04 09:23 白缺 阅读(6) 评论(0) 推荐(0) 编辑
摘要:栈 后进先出 LIFO 两种实现方式 使用数组实现的叫静态栈 使用链表实现的叫动态栈 相关题目 简单难度 225. 用队列实现栈 https://leetcode.cn/problems/implement-stack-using-queues/ class MyStack { private Qu 阅读全文
posted @ 2024-01-25 22:14 白缺 阅读(4) 评论(0) 推荐(0) 编辑
摘要:感谢@pdai的全栈知识体系,数据结构与算法是相通的,做的题目与原博主不同。 https://www.pdai.tech/md/algorithm/alg-basic-array.html 哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结 阅读全文
posted @ 2024-01-23 09:56 白缺 阅读(21) 评论(0) 推荐(0) 编辑
摘要:感谢@pdai的全栈知识体系,数据结构与算法是相通的,做的题目与原博主不同。 https://www.pdai.tech/md/algorithm/alg-basic-array.html 数组 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数 阅读全文
posted @ 2024-01-23 09:25 白缺 阅读(10) 评论(0) 推荐(0) 编辑
摘要:采用了回溯的方法。先选用第一个大礼包,然后一直到选第一个大礼包 n 次。其中递归调用自身决定下一个大礼包选用几次。 题目难点: 回溯的时候比较麻烦,因为可能遍历到中间才知道,哦,这个大礼包不能用,这时候就要把数组恢复到一开始的状态,详细做法可以看代码 多行输入,采用的方法可见代码,这是多行不定长输入 阅读全文
posted @ 2022-10-19 00:28 白缺 阅读(204) 评论(0) 推荐(0) 编辑
摘要:解题思路 确定dp数组(dp table)以及下标的含义dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j] 确定递推公式 主要就是两大情况:text1[i - 1] 与 text2[j - 1]相同,text 阅读全文
posted @ 2022-10-18 21:32 白缺 阅读(47) 评论(0) 推荐(0) 编辑
摘要:根据题目可以联想到无限个数物品的背包问题,dp[j] 表示能组合为 j 的个数是多少,外层 i 循环是遍历表示加入第 i 个数之后的状态,因为是无限个数,所以内层循环是正序遍历,加了一次第 i 个数之后,可以在它基础上继续加第 i 个数。 该题有两个要注意的地方: 因为算的是组合个数,所以 dp[j 阅读全文
posted @ 2022-10-18 18:03 白缺 阅读(111) 评论(0) 推荐(0) 编辑
摘要:动态规划,dp,即计算多加第i个数,可以达到的数值可以到多少。详细可见:https://leetcode.cn/problems/partition-equal-subset-sum/solution/fen-ge-deng-he-zi-ji-by-leetcode-solution/ #inclu 阅读全文
posted @ 2022-10-18 13:30 白缺 阅读(86) 评论(0) 推荐(0) 编辑
摘要:回溯加上满足优美的排列判断 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; int cnt; void backTrack(vector<bool>& 阅读全文
posted @ 2022-10-17 17:14 白缺 阅读(78) 评论(0) 推荐(0) 编辑
摘要:回溯,唯一麻烦的是要建立一个字典,键值对为数字字符对应英文字符串 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; void backtrack(vect 阅读全文
posted @ 2022-10-15 13:53 白缺 阅读(64) 评论(0) 推荐(0) 编辑
摘要:回溯法比较简单易懂,耗时比较长,也能过。有动态规划的解法大家可以自己想一想。 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; int cnt = 0; 阅读全文
posted @ 2022-10-14 22:18 白缺 阅读(65) 评论(0) 推荐(0) 编辑
摘要:做过那么多道回溯题,我才明白回溯的重点难点不是如何遍历全部,而是要回溯到之前的状态,即在一个调用递归的语句后面加上还原回原状态的语句,比如:数组添加了一个元素,然后调用了递归函数,那这个调用语句之后紧接着的应该是数组弹出刚刚添加的元素,这就回溯到了之前的状态。 #include<iostream> 阅读全文
posted @ 2022-10-11 15:10 白缺 阅读(46) 评论(0) 推荐(0) 编辑
摘要:简单的一道回溯题,具体解法看代码,有注释 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; int ret = 0; void dfs(vector<in 阅读全文
posted @ 2022-10-11 14:06 白缺 阅读(86) 评论(0) 推荐(0) 编辑
摘要:纯暴力遍历+剪枝,将任务看出有k个桶,要将每个桶都刚刚好装满。 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; static bool dfs(vect 阅读全文
posted @ 2022-10-10 15:48 白缺 阅读(67) 评论(0) 推荐(0) 编辑
摘要:感觉很简单的一道题,curnum存下连续数组和大于0的数值,maxnum存下最大连续数组和,curnum从数组头开始,遍历数组,+= 数组值,当curnum大于0时,那么即便紧接着的后面有一个很大的数组和,但是加上curnum会更大,但是curnum小于0的时候,会损害后面的数组和,所以curnum 阅读全文
posted @ 2022-09-21 13:23 白缺 阅读(68) 评论(0) 推荐(0) 编辑
摘要:贪心:选三个最长的边组成三角形,如果最长的三个边不能组成,那么这时候无论把第二和第三大的边换成什么都不可能能够和最大的边组成三角形,这时候就必须把最大的边给换掉,把最大的边提出考虑范围,这时候第二大的边就变成了最大的边。以此往复,最后选到合适的三条边,这时这三条边的和就是能组成三角形的最大周长。 # 阅读全文
posted @ 2022-09-20 14:42 白缺 阅读(120) 评论(0) 推荐(0) 编辑
摘要:我写的并不好,力扣上有比这更好的方法 我的思路:从头遍历数组,检查位置是否能放下花,能放就放下,然后检查下一个位置,注意放下之后就改变了数组。然后就是注意前后数组越界,注意数组只有一个数时的情况。 #include<iostream> #include<bits/stdc++.h> #include 阅读全文
posted @ 2022-09-20 13:42 白缺 阅读(141) 评论(0) 推荐(0) 编辑
摘要:贪心:把 9 换成 6 是不可能的,只有把 6 换成 9,而且要换就换最高位的那个 6 C++: to_string 可以将整数转化为 string 类型,stoi 可以将 string 转化为 int 类型,这个好用! #include<iostream> #include<bits/stdc++ 阅读全文
posted @ 2022-09-19 12:51 白缺 阅读(137) 评论(0) 推荐(0) 编辑
摘要:力扣也有这道题,但是力扣做的很快,碰到有输入输出的题目就感觉我在做两道题目,一道是如何输入两行,每行是一个不定长的数组元素,最后在代码中转为数组,c++不好做,c的话可能就更难了。另一道是贪心的题目,这里有个很重要的,就是每个孩子只能吃一个饼干,那么就只需要先将两个数组排序,从胃口最小的孩子开始,让 阅读全文
posted @ 2022-09-19 12:35 白缺 阅读(110) 评论(0) 推荐(0) 编辑
摘要:采用递归遍历所有可能性,再使用剪枝减小运行时间,利用回溯,代码有注释 #include<iostream> #include<bits/stdc++.h> #include<cstdio> #include<string> using namespace std; vector<vector<int 阅读全文
posted @ 2022-09-18 23:27 白缺 阅读(69) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示