摘要: 题目链接 解题思路 求最小子串问题,第一时间,想「以i开头的结果是什么」,求出所有的结果,最优的便是;或者「以i结尾的结果是什么」,求出所有的结果,最优的便是 这个题使用「以i开头的结果是什么」,假设是[i, j]然后再求i+1的结果时,我们发现,只需要把i位置的字符去掉,就可以知道是否满足结果,如 阅读全文
posted @ 2024-11-11 11:24 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目链接 这就是「荷兰国旗」问题,把颜色分成左边红色、中间白色、右边蓝色的顺序,实现快排的一部分步骤。 解题思路 我们可以有一个left_border变量,表示[0, left_border]都是红色,同时,一个right_border变量,[right_border, n - 1]都是蓝色,那么[ 阅读全文
posted @ 2024-11-11 10:11 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目链接 本题使用的是快排解决。 思路:「荷兰国旗」问题,具体思路跳转75. 颜色分类 代码 class Solution { public: void swap(vector<int>& nums, int i, int j) { int tmp = nums[i]; nums[i] = nums 阅读全文
posted @ 2024-11-11 10:10 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题目链接 解题思路 直接暴力递归,process(i, j):word1[i...]转换成word2[j...]需要的最少操作次数,也就是说,i字符之前的不用处理了,已经变成了j字符之前的了。 如果word1[i] == word2[j] 可以什么操作都不干,i和j就完成了,所以返回process( 阅读全文
posted @ 2024-11-11 09:26 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目链接 这道题目与62.不同路径很像,来到[i, j]位置,只能向下,或者向右走,只不过改题是要求总和最小。 process(i, j):当前在[i, j]位置,返回最小路径和 所以当在[i, j],如果还能往下走,一种答案就是process(i + 1, j) + grid[i][j] 如果还能 阅读全文
posted @ 2024-11-11 08:58 ouyangxx 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 题目链接 解题思路 方法一:暴力递归,process(i, j),当前在[i, j]位置,到达右下角有多少种方法? 如果i < m - 1,那么可以往下走,所以结果加process(i + 1, j) 如果j < n - 1,那么可以往右走,所以结果加process(i, j + 1) 因为只有两个 阅读全文
posted @ 2024-11-10 22:08 ouyangxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目链接 解题思路 最大子数组问题,有两个基本的想法,以i开头的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案;以i结尾的子数组结果是怎样的,求出所有的结果,最优的那个,就是答案。 本题我们可以考虑,「以i结尾的结果是怎样的」,为啥?因为我们要求的是最大的累加和,我们求出了res1=「以i 阅读全文
posted @ 2024-11-10 21:35 ouyangxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目链接 解题思路 方法一:(注:这种方法过不了,提供一种思路,如果只想过题,可直接跳转到方法二)自顶向下的动态规划,先写暴力递归过程,然后再直接加缓存表即可。 bool process(nums, index, next) nums:固定参数 index:当前来到的下标 next:能够走到的最远的 阅读全文
posted @ 2024-11-10 21:29 ouyangxx 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题目链接 解题思路 合并区间,肯定要按照第一维度排序。 然后依次处理每个区间。假设现在来到i区间[a, b],i之前的区间已经处理好,并且与i区间不重叠。i + 1的区间是[c, d],因为已经按照第一维度排序,所以能够得到a >= c,那么,b和c的关系如何? b < c:说明i区间与i+1区间不 阅读全文
posted @ 2024-11-10 21:20 ouyangxx 阅读(4) 评论(0) 推荐(0) 编辑