当前位置: 首页 > news >正文

代码随想录算法训练营Day44

力扣1045.不相交的线【medium】
力扣53.最大子数组和【medium】
力扣392.判断子序列【easy】

一、力扣1045.不相交的线【medium】

题目链接:力扣1045.不相交的线
在这里插入图片描述
视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 和1143.最长公共子序列一致
  • 在这里插入图片描述
  • 时间复杂度: O ( m ∗ n ) O(m * n) O(mn)

2、代码

class Solution:def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:m, n = len(nums1), len(nums2)@cachedef dfs(i:int, j:int) -> int:if i < 0 or j < 0:return 0if nums1[i] == nums2[j]:return dfs(i - 1, j - 1) + 1return max(dfs(i - 1, j), dfs(i, j - 1))return dfs(m - 1, n - 1)
class Solution:def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:m, n = len(nums1), len(nums2)f = [[0] * (n + 1) for _ in range(m + 1)]for i, x in enumerate(nums1):for j, y in enumerate(nums2):f[i + 1][j + 1] = f[i][j] + 1 if x == y else max(f[i][j + 1], f[i + 1][j])return f[m][n]
class Solution:def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:m, n = len(nums1), len(nums2)f = [0] * (n + 1) for i, x in enumerate(nums1):pre = 0for j, y in enumerate(nums2):tmp = f[j + 1]f[j + 1] = pre + 1 if x == y else max(f[j + 1], f[j])pre = tmp #保证 pre 是 f 数组上一行的数据,不是当前行的数据。return f[n]

二、力扣53.最大子数组和【medium】

题目链接:力扣53.最大子数组和
题解链接:灵茶山艾府

1、思路

  • 在这里插入图片描述

  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:def maxSubArray(self, nums: List[int]) -> int:# result = float('-inf') # 初始化结果为负无穷大# count = 0# for i in range(len(nums)):#     count += nums[i]#     if count >= result:#         result = count#     if count < 0:#         count = 0 # 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和# return result# ans = -inf# min_pre_sum = pre_sum = 0# for x in nums:#     pre_sum += x#     ans = max(ans, pre_sum - min_pre_sum)#     min_pre_sum = min(min_pre_sum, pre_sum)# return ansn = len(nums)f = [0] * nf[0] = nums[0]for i in range(1, n):f[i] = max(f[i - 1], 0) + nums[i]return max(f)

三、力扣392.判断子序列【easy】

题目链接:力扣392.判断子序列
题解链接:灵茶山艾府

1、思路

  • 在这里插入图片描述
  • 时间复杂度: O ( n ) O(n) O(n)

2、代码

class Solution:def isSubsequence(self, s: str, t: str) -> bool:if len(s) == 0 :return Truei = 0for c in t:if  s[i] == c:i += 1if i == len(s):return Truereturn False

http://www.dtcms.com/a/171119.html

相关文章:

  • 2025深圳杯东三省数学建模竞赛B题完整分析论文(共27页)(含模型、可运行代码、求解结果)
  • 力扣1128题解
  • C# 定时器实现
  • 渗透测试中扫描成熟CMS目录的意义与技术实践
  • dubbo 参数校验-ValidationFilter
  • 代码随想录day7: 哈希表part02
  • 计算方法实验六 数值积分
  • TimSort算法解析
  • Linux的系统周期化任务
  • Hive进阶之路
  • 阿里云服务器全栈技术指导手册(2025版)
  • MATLAB实现二氧化硅和硅光纤的单模光波特性与仿真
  • 大连理工大学选修课——图形学:第三四章 基本图形生成算法
  • LLM-Based Agent及其框架学习的学习(三)
  • 笔记整理六----OSPF协议
  • Android Framework学习三:zygote剖析
  • idea创建springboot项目无法创建jdk8原因及多种解决方案
  • 外观模式(Facade Pattern)
  • 字符串匹配 之 KMP算法
  • 【五一培训】Day 3
  • 【React】 Hooks useTransition 解析与性能优化实践
  • SecureCRT设置自定义快捷键
  • 【Java项目脚手架系列】第一篇:Maven基础项目脚手架
  • 软考-软件设计师中级备考 9、存储管理
  • RR(Repeatable Read)级别如何防止幻读
  • 健康养生指南:科学守护身心
  • go实现循环链表
  • 位图的实现和拓展
  • Dubbo(94)如何在金融系统中应用Dubbo?
  • 【翻译、转载】使用 LLM 构建 MCP