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

网站开发制作公司名称必应搜索

网站开发制作公司名称,必应搜索,吉林哪里做网站,江苏建设工程标准网站刷题记录 1143. 最长公共子序列1035. 不相交的线53. 最大子数组和动态规划优化版 392. 判断子序列 1143. 最长公共子序列 leetcode题目地址 本题和300. 最长递增子序列相似(题解)。 使用动态规划: dp数组含义:dp[i][j]表示 以…

刷题记录

  • 1143. 最长公共子序列
  • 1035. 不相交的线
  • 53. 最大子数组和
    • 动态规划
    • 优化版
  • 392. 判断子序列

1143. 最长公共子序列

leetcode题目地址

本题和300. 最长递增子序列相似(题解)。

使用动态规划:

  1. dp数组含义:dp[i][j]表示 以text1[i-1]结尾的子串A以text2[j-1]结尾的子串B 的最长公共子序列的长度。
  2. 思路同300. 最长递增子序列,每个状态更新基于前面的状态,为了防止越界,dp数组下标从1开始。
  3. 状态转移方程:
  • 当 text1[i-1] == text2[j-1] 时,dp[i][j] = dp[i-1][j-1] + 1;
  • 当 text1[i-1] == text2[j-1] 时,dp[i][j] = max(dp[i-1][j], dp[i][j-1])
    • 这里解释一下 max(dp[i-1][j], dp[i][j-1]) 的含义:由于dp数组存储的是两个子串的最长公共子序列的长度,当两个子串的单个字符不匹配时,对应下标处的dp值要赋值为前面子串的匹配情况取最长,即dp[i-1][j]表示以text1[i-2]结尾的子串A以text2[j-1]结尾的子串B 的最长公共子序列的长度,dp[i][j-1]表示以text1[i-1]结尾的子串A以text2[j-2]结尾的子串B 的最长公共子序列的长度。

时间复杂度: O ( n ∗ m ) O(n*m) O(nm)
空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

// java
class Solution {public int longestCommonSubsequence(String text1, String text2) {int len1 = text1.length(), len2 = text2.length();char[] arr1 = text1.toCharArray(), arr2 = text2.toCharArray();int[][] dp = new int[len1+1][len2+1];for(int i = 1; i <= len1; i++){for (int j = 1; j <= len2; j++){if(arr1[i-1] == arr2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;} else{dp[i][j] = Math.max(dp[i][j-1], dp[i-1][j]);}// System.out.print(dp[j] + " ");}// System.out.println();}return dp[len1][len2];}
}

1035. 不相交的线

leetcode题目地址

本题其实与上一题1143. 最长公共子序列的思路完全一致。题目的描述时要求找不相交的线的最大连线数,而不相交的线其实就是找两个序列的公共子序列(不相交就是两个子序列在原序列中相对顺序一致)。

时间复杂度: O ( n ∗ m ) O(n*m) O(nm)
空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

// java
class Solution {public int maxUncrossedLines(int[] nums1, int[] nums2) {int len1 = nums1.length, len2 = nums2.length;int[][] dp = new int[len1+1][len2+1];for(int i=1; i<=len1; i++){for(int j=1; j<=len2; j++){if(nums1[i-1] == nums2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;} else{dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);}}}return dp[len1][len2];}
}

53. 最大子数组和

leetcode题目地址

  • dp数组含义:
    dp[i]表示以nums[i]结尾(包含)的最大子数组和

  • 状态转移方程:
    dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);

    • dp[i-1] + nums[i]表示上一个(以nums[i-1]结尾的)子序列加入当前nums[i]
    • nums[i]表示从当前元素开始从头计算(仅包含当前元素的子序列)
  • 初始化:
    dp[i]表示以nums[i]结尾(包含)的最大子数组和,因此dp[0]初始化为nums[0],后面状态均为0.

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

动态规划

// java
class Solution {public int maxSubArray(int[] nums) {int len = nums.length;int[] dp = new int[len];dp[0] = nums[0];int result = nums[0];for(int i=1; i<len; i++){dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);result = Math.max(dp[i], result);}return result;}
}

优化版

可以看到在动规中每个状态的更新都仅依赖于前一个状态,因此无需使用数组,仅使用一个变量来记录前一个状态。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public int maxSubArray(int[] nums) {int len = nums.length;int res = nums[0];int result = nums[0];for(int i=1; i<len; i++){res = Math.max(res + nums[i], nums[i]);result = Math.max(res, result);}return result;}
}

392. 判断子序列

leetcode题目地址

本题本质上依旧是寻找最长公共子序列。给定s和t,判断s是否是t的子序列,也就是查看s和t的最长公共子序列长度是否等于s的长度。

  • dp数组含义:
    dp[i][j]表示 以s[i-1]结尾的子串A以t[j-1]结尾的子串B 的最长公共子序列。
  • 状态转移方程:
    • 当s[i-1] == t[j-1]时,dp[i][j] = dp[i-1][j-1] + 1;
    • 当s[i-1] != t[j-1]时,dp[i][j] = dp[i][j-1];

这里不匹配时为什么是 dp[i][j] = dp[i][j-1] 而不是 dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1])
因为是在t中查找s是否是子序列,因此在不匹配时,只能删除t中的字符来查看分别以s[i-1]和t[j-2]结尾的子串的匹配情况。

而1143. 最长公共子序列不给定谁为子串,因此需要分别考虑各自为另一个字符串的子串的情况。

时间复杂度: O ( n ∗ m ) O(n*m) O(nm)
空间复杂度: O ( n ∗ m ) O(n*m) O(nm)

// java
class Solution {public boolean isSubsequence(String s, String t) {char[] sArry = s.toCharArray();char[] tArry = t.toCharArray();int len1 = s.length(), len2 = t.length();int[][] dp = new int[len1+1][len2+1];for(int i=1; i<=len1; i++){for(int j=1; j<=len2; j++){if(sArry[i-1] == tArry[j-1]){dp[i][j] = dp[i-1][j-1] + 1;} else {dp[i][j] = dp[i][j-1];}// System.out.print(dp[i][j] + " ");}// System.out.println();}return dp[len1][len2] == len1;}
}
http://www.dtcms.com/wzjs/234767.html

相关文章:

  • 那个网站ppt做的比较好采集站seo赚钱辅导班
  • 网站搜索用户体验电商平台怎么注册
  • 站长之家新网址如何做网站推广优化
  • 虚拟资源交易平台Wordpress源码正规seo一般多少钱
  • 网站建设的工作描述最近比较火的关键词
  • 曲阜网站建设外链代发软件
  • 找网站建设的企业网络营销网站
  • 宝鸡网站建设哪家好免费软文发布平台有哪些
  • 帮人做传销网站违法吗seo排名怎么优化软件
  • 三合一网站建设官网网络公司网络营销推广方案
  • wordpress blog 主题搜索引擎优化的核心及内容
  • 哪个网站做ppt模板赚钱温州最好的seo
  • 做网站价格公司互联网销售包括哪些
  • 做国内学历公证的网站seo网站收录工具
  • 网站建设推广和网络推广整合营销案例
  • 自己建网站程序电脑系统优化软件哪个好用
  • 杭州做网站企业互联网营销顾问
  • 江汉路做网站的公司宁波seo服务
  • 网站加入搜索引擎怎么做软文营销的概念
  • 深圳住房和城乡建设局网站广州seo关键词优化外包
  • 建网站资阳哪家强?百度经验app
  • 建设网站前的需求分析阳江seo
  • 北京网站建设方案报价广东全网推广
  • 怎么可以预览自己做的网站滕州百度推广
  • 进网站后台显示空白百度直播平台
  • 找做玻璃的网站51链
  • 重庆的电子商务网站东莞搜索优化十年乐云seo
  • 外贸网站域名能用cn做后缀吗域名注册需要哪些条件
  • 代做底单的网站济南seo公司报价
  • 怎么做网站赚钱的动漫网站长尾词seo排名