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

代码随想录算法训练营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.xdnf.cn/news/3977.html

相关文章:

  • PyTorch_张量索引操作
  • Spring Cloud Gateway路由+断言+过滤
  • Flask + SQLite 简单案例
  • 位置权限关掉还能看到IP属地吗?全面解析定位与IP的关系
  • 腾讯云服务器技术全景解析:从基础架构到行业赋能​
  • React-router v7 第七章(导航)
  • 如何使用VSCode编写C、C++和Python程序
  • ES类迁移方法
  • 【翻译、转载】MCP 提示 (Prompts)
  • Kubernetes 安装 minikube
  • 计算机图形学编程(使用OpenGL和C++)(第2版) 01.环境搭建
  • Python的ArcPy基于Excel表格对大量遥感影像批量重分类
  • 第8章 Python 其他数据类型概述
  • LeetCode 1007. 行相等的最少多米诺旋转 题解
  • ZArchiver正版:高效文件管理,完美解压体验
  • 二、大模型原理:图文解析Transformer原理与代码
  • 第十章.XML
  • Android第三次面试总结之activity和线程池篇(补充)
  • C++基础算法:Dijkstra
  • Python 函数装饰器和闭包(变量作用域规则)
  • 基于k8s系统的API网关-kong网关
  • C++类与对象—下:夯实面向对象编程的阶梯
  • c++STL——set和map的使用
  • 5个情感丰富GPT-4o图像提示词(不是吉卜力风格)
  • transfomer网络构建
  • 平衡二叉搜索树模拟实现1-------AVL树(插入,删除,查找)
  • Fine Structure-Aware Sampling(AAAI 2024)论文笔记和启发
  • 交叉编译 opencv-4.10
  • [MATLAB]通过50个MATLAB程序理解信号与系统的核心概念
  • 学习黑客 TCP/IP