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

天津网站优化公司电话未来网站建设想法

天津网站优化公司电话,未来网站建设想法,陕西省建设网站查询证件相片,本地网络营销方式1.最长公共子序列 1143. 最长公共子序列 - 力扣(LeetCode) 状态转移 如果当前字符相等: dp[i][j]dp[i−1][j−1]1dp[i][j] dp[i-1][j-1] 1dp[i][j]dp[i−1][j−1]1 把它们加到前面 LCS 的基础上。 如果当前字符不相等: dp[i][…

1.最长公共子序列

1143. 最长公共子序列 - 力扣(LeetCode)

  1. 状态转移

    • 如果当前字符相等

      dp[i][j]=dp[i−1][j−1]+1dp[i][j] = dp[i-1][j-1] + 1dp[i][j]=dp[i−1][j−1]+1

      把它们加到前面 LCS 的基础上。

    • 如果当前字符不相等

      dp[i][j]=max⁡(dp[i−1][j], dp[i][j−1])dp[i][j] = \max(dp[i-1][j],\ dp[i][j-1])dp[i][j]=max(dp[i−1][j], dp[i][j−1])

      舍弃 text1 当前字符或 text2 当前字符,取较长结果。

  2. 初始化

    • dp[0][*] = 0dp[*][0] = 0(一个字符串为空时,公共子序列长度为 0)。

  3. 最终答案

    • dp[len(text1)][len(text2)]


3. 复杂度分析

  • 时间复杂度:O(m×n)O(m \times n)O(m×n)

  • 空间复杂度:O(m×n)O(m \times n)O(m×n),可优化到 O(min⁡(m,n))O(\min(m, n))O(min(m,n))。

class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:# 子序列不要求连续#dp[i][j]表示以text1[i-1]和text2[j-1]结尾的最长公共子序列的长度dp = [[0] * (len(text2)+1) for _ in range(len(text1)+1)]for i in range(1, len(text1)+1):for j in range(1, len(text2)+1):if text1[i-1] == text2[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = max(dp[i-1][j], dp[i][j-1])return dp[-1][-1]

2.不相交的线

1. 问题本质

  • 给定两个数组 nums1nums2,可以在两个数组中连接相等的数字画线,要求直线不能相交

  • 不相交 的含义是:在两个数组中连接的元素必须保持相对顺序。

  • 这和 最长公共子序列(LCS) 问题是完全等价的:

    顺序相同,不要求连续。


2. 动态规划思想

状态定义

  • dp[i][j] 表示:

    nums1[0..i-1]nums2[0..j-1] 的最大不相交直线数量。

状态转移

  1. 如果 nums1[i-1] == nums2[j-1]

    • 这两个点可以连一条线,数量 = 之前子问题的数量 + 1

      dp[i][j]=dp[i−1][j−1]+1dp[i][j] = dp[i-1][j-1] + 1dp[i][j]=dp[i−1][j−1]+1
  2. 如果不相等:

    • 只能舍弃 nums1 的当前元素或 nums2 的当前元素,取较大值

      dp[i][j]=max⁡(dp[i−1][j],dp[i][j−1])dp[i][j] = \max(dp[i-1][j], dp[i][j-1])dp[i][j]=max(dp[i−1][j],dp[i][j−1])

初始化

  • dp[0][*] = 0

  • dp[*][0] = 0

答案

  • 最终 dp[m][n](m 和 n 是两个数组的长度)即为最大不相交直线数。

class Solution:def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:#如果两条线不相交,说明连接的数字在两个数组中 顺序一致。#这与 LCS 的定义完全一致(顺序相同,不要求连续)。m = len(nums1)n = len(nums2)dp = [[0]*(n+1) for _ in range(m+1)]for i in range(1, m+1):for j in range(1, n+1):if nums1[i-1] == nums2[j-1]:dp[i][j] = dp[i-1][j-1]+1else:dp[i][j] = max(dp[i][j-1], dp[i-1][j])return dp[-1][-1]

3.最大子序和

53. 最大子数组和 - 力扣(LeetCode)

最大子数组和(Maximum Subarray)动态规划思路总结

1. 问题定义

给定整数数组 nums,找到一个连续子数组,使其元素和最大,返回该最大和。


2. 状态定义

  • dp[i] 表示以 nums[i] 结尾 的连续子数组的最大和。


3. 状态转移方程

dp[i]=max⁡(dp[i−1]+nums[i], nums[i])dp[i] = \max(dp[i-1] + nums[i],\ nums[i])dp[i]=max(dp[i−1]+nums[i], nums[i])

  • 两种选择:

    • 扩展之前的子数组(即加上当前元素)

    • 从当前元素重新开始(放弃之前的和)


4. 初始化

dp[0]=nums[0]dp[0] = nums[0]dp[0]=nums[0]


5. 结果

  • 最大子数组和为:

max⁡0≤i<ndp[i]\max_{0 \leq i < n} dp[i]0≤i<nmax​dp[i]


6. 算法复杂度

  • 时间复杂度:O(n)O(n)O(n) ,只需遍历一次数组。

  • 空间复杂度:O(n)O(n)O(n),存储状态数组,可优化为 O(1)O(1)O(1) 使用滚动变量。


7. 贪心思想

  • 在动态规划中体现为“如果之前的累计和是负数,则舍弃之前的和,从当前元素重新开始”,局部最优保证全局最优。

两种解法:

第一种动态规划:

class Solution:def maxSubArray(self, nums: List[int]) -> int:#dp[i] 表示以 nums[i] 结尾的最大连续子数组和。dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(dp[i-1]+nums[i], nums[i])return max(dp)

第二种贪心:

class Solution:def maxSubArray(self, nums: List[int]) -> int:#最大和的连续子数组#只要连续和不是负数,一直往后加Sum = 0result = float('-inf')for i in range(len(nums)):if Sum >= 0:Sum += nums[i]result = max(Sum, result)else:Sum = nums[i]return result

4.判断子序列

392. 判断子序列 - 力扣(LeetCode)

class Solution:def isSubsequence(self, s: str, t: str) -> bool:#dp[i][j] 表示以下标i-1结尾的字符串s和以下标j-1结尾的字符串t,相同子序列的长度是dp[i][j]m = len(s)n = len(t)dp = [[0]*(n+1) for _ in range(m+1)]for i in range(1, m+1):for j in range(1, n+1):if s[i-1] == t[j-1]:dp[i][j] = dp[i-1][j-1] + 1#如果不匹配,则跳过 t[j-1] 字符,即 dp[i][j] = dp[i][j-1]else:dp[i][j] = dp[i][j-1]if dp[m][n] == m:return Truereturn False

另一种双指针写法:

class Solution:def isSubsequence(self, s: str, t: str) -> bool:i, j = 0, 0while i < len(s) and j < len(t):if s[i] == t[j]:i += 1j += 1return i == len(s)

今天结束!

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

相关文章:

  • 动易6.8网站头怎么做电商卖东西
  • 电子商务网站建设合同wordpress临时关闭站点
  • 建设网站收取广告费用产品宣传短视频
  • 做婚纱摄影网站多少钱企业一站式网站建设
  • 网站中的ppt链接怎么做的大学生网站建设小结
  • 个人网站建设模板企业创建网站
  • 网页站点的用途做网站图
  • 响应式网站开发源码网络强国建设的未来
  • 做视频网站容易收录吗wordpress搭建方案
  • 公司找人做网站游戏推广工作怎么样
  • 做网站的技术域名会影响网站排名吗
  • 如何创建一个网站链接网站做百度竞价利于百度优化
  • app手机网站模板怎么建设电子邮箱网站
  • 企业的网站品牌推广如何禁止ip访问网站
  • 文化传媒可以做网站吗网站规划与建设 ppt
  • 大安移动网站建设网站软文推广网站
  • 招远网站制作wordpress 切换语言
  • 网站开发后端待遇如何做网站的软件
  • 做同城网站还有机会吗济南建设个人网站平台
  • 清远seo站内优化如何用ae做模板下载网站
  • 长沙网站seo技巧男科免费咨询
  • 东阳市住房和城乡建设局网站系部网站开发计划书
  • 网站无法上传图片网站模板 电器
  • 个人建立一个网站要多少钱拓者设计吧室内设计官网登录
  • 如何提高网站的搜索排名备案查询网
  • 赣州市网站建设成都高新区规划国土建设局网站
  • 网站建设开票内容些什么东莞企业网站建设设计
  • 做携程怎样的网站织梦网站图标更换
  • 易展 网站建设iis7创建网站
  • 建设企业网站的好处是什么军事新闻大事