
数据结构与算法
弼码温弘毅
尽人事,听天命
展开
-
LeetCode 1138. 字母板上的路径
题目描述 解题思路: 思路是维护两个坐标,分别为当前位置坐标和下一个目标位置坐标。假设下一个目标字符为c,则下一个目标位置坐标的横坐标为x = (c-‘a’) / 5, y = (c-‘a’) % 5; 有了上述两个坐标,我们就可以得到一个向量,从当前坐标指向目标坐标,且由题意可知,只有上下左右四个方向可以运动,因此最快的方式肯定是要么横向一直朝着左或右走,纵向一直朝着上或下走,同时横向移动和纵向移动的顺序可以随意。因此最短的移动方式有多重,这里我采用的是横着或纵着走到底。 本题还还有一个坑的地方,就是最后原创 2021-06-23 23:25:12 · 218 阅读 · 0 评论 -
面试题之最大子矩阵
题目如下: 面试题 17.24. 最大子矩阵 给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 思路如下: 解题思路 本题的子问题为《LeetCode 53.最大子序和》,不同的是本题为二维矩阵,因此需要将二维矩阵“打成”一维,然后套用最大子串和,打的手段是使用preSum前原创 2021-06-22 23:59:38 · 87 阅读 · 0 评论 -
动态规划之交错字符串
题目如下: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = s1 + s2 + … + sn t = t1 + t2 + … + tm |n - m| <= 1 交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + … 提示:a + b 意味着字符串 a 和 b原创 2021-06-14 12:45:14 · 185 阅读 · 0 评论 -
动态规划 之 最后一块石头的重量
题目如下: 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。 ...原创 2021-06-10 22:33:18 · 280 阅读 · 0 评论