当前位置: 首页 > 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

相关文章:

  • 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
  • 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动
  • 人民日报和音:引领新时代中俄关系坚毅前行
  • 巴菲特掌舵伯克希尔60年后将卸任CEO,库克:认识他是人生中最珍贵的经历之一
  • 五一假期旅游大市党政领导靠前调度,重视解决游客反映的问题
  • 英国传统两党受挫地方选举后反思,改革党异军突起“突破想象”
  • 一代名伶程砚秋经典影像:一箱旧影,芳华满堂