leetcode打卡

1 动态规划-字符串公共子序列

计算使两个字符串相等所需删除字符的最小 ASCII 值之和,核心思路是动态规划。

可以将问题转化为寻找两个字符串的公共子序列,使得这个子序列的 ASCII 值之和最大

解题思路

定义 dp[i][j] 表示使 s1 的前 i 个字符和 s2 的前 j 个字符相等所需的最小删除 ASCII 和。状态转移如下:

  • 如果 s1[i-1] == s2[j-1],当前字符可以保留,不需要删除,即 dp[i][j] = dp[i-1][j-1]

  • 否则,可以删除 s1[i-1]s2[j-1],取两者中代价较小的:
    dp[i][j] = min(dp[i-1][j] + ord(s1[i-1]), dp[i][j-1] + ord(s2[j-1]))

初始化边界条件:

  • dp[0][j]s1 为空,需要删除 s2 的所有前 j 个字符,即累加 s2 的 ASCII 值。

  • dp[i][0]s2 为空,需要删除 s1 的所有前 i 个字符,即累加 s1 的 ASCII 值。

最终答案为 dp[n][m],其中 nm 分别为 s1s2 的长度

遇到的问题

1.dp递归方程不理解

2.dp矩阵下标与字符串下标的区别

3.初始化边界

2 最大矩形-单调栈

python 复制代码
from typing import List

class Solution:
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        if not matrix or not matrix[0]:
            return 0
        
        rows, cols = len(matrix), len(matrix[0])
        heights = [0] * cols
        max_area = 0
        
        # 遍历每一行
        for i in range(rows):
            # 更新高度数组
            for j in range(cols):
                if matrix[i][j] == '1':
                    heights[j] += 1
                else:
                    heights[j] = 0
            
            # 计算当前行的柱状图最大矩形面积
            max_area = max(max_area, self.largestRectangleArea(heights))
        
        return max_area
    
    def largestRectangleArea(self, heights: List[int]) -> int:
        """单调栈解法:计算柱状图中的最大矩形面积"""
        n = len(heights)
        stack = []  # 存储索引,保持索引对应的高度单调递增
        max_area = 0
        
        # 遍历所有柱子,末尾添加一个高度为0的虚拟柱子
        for i in range(n + 1):
            # 当前柱子的高度(如果是最后一个虚拟柱子,高度为0)
            current_height = heights[i] if i < n else 0
            
            # 当前柱子高度小于栈顶柱子高度时,弹出栈顶并计算面积
            while stack and current_height < heights[stack[-1]]:
                # 弹出栈顶索引
                height = heights[stack.pop()]
                # 左边界:如果栈为空则为-1,否则为当前栈顶索引
                left = -1 if not stack else stack[-1]
                # 右边界:当前索引i
                width = i - left - 1
                # 计算面积并更新最大值
                max_area = max(max_area, height * width)
            
            # 当前柱子入栈
            stack.append(i)
        
        return max_area

3.切比雪夫距离

两点之间的距离 = max(dx, dy)

python 复制代码
class Solution:
    def minTimeToVisitAllPoints(self, points: List[List[int]]) -> int:
        res = 0
        for i in range(len(points)-1):
            x0,x1 = points[i]
            y0,y1 = points[i+1]
            res+=max(abs(x0-y0),abs(x1-y1))
        return res

4.分割正方形

最小二分求解

相关推荐
A尘埃4 小时前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹4 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
不穿格子的程序员4 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物4 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
hqyjzsb4 小时前
盲目用AI提效?当心陷入“工具奴”陷阱,效率不增反降
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·远程工作
铉铉这波能秀4 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士4 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法
仟濹4 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)4 小时前
欠采样时的相位倒置问题
算法
历程里程碑5 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法