【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)

在这里插入图片描述

文章目录

  • 35.最大子数组和
    • 35.1题目
    • 35.2解法:动规
      • 35.2.1动规思路
      • 35.2.2代码实现
  • 36.判断子序列
    • 36.1题目
    • 36.2解法:动规
      • 36.2.1动规思路
      • 36.2.2代码实现
  • 37.不同的子序列
    • 37.1题目
    • 37.2解法:动规
      • 37.2.1动规思路
      • 37.2.2代码实现

35.最大子数组和

35.1题目

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组

是数组中的一个连续部分。

  • 示例一:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 
  • 示例二:
输入:nums = [1]
输出:1

35.2解法:动规

35.2.1动规思路

  1. 确定dp数组以及下标含义:

    dp[i]:下标为i的子数组的最大子数组和为dp[i]

  2. 确定递推公式:dp[i]=Math.max( dp[i-1]+nums[i],nums[i])

  3. dp数组初始化:dp[0]=Math.max(0,nums[i])

  4. 确定遍历顺序:从前往后

  5. 举例推导:

    image-20240628212440809

35.2.2代码实现

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

36.判断子序列

36.1题目

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

  • 示例一:
输入:s = "abc", t = "ahbgdc"
输出:true
  • 示例二:
输入:s = "axc", t = "ahbgdc"
输出:false

36.2解法:动规

36.2.1动规思路

  1. 确定dp数组以及下标含义:

    dp(i)(j):表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同的子序列的长度为dp(i)(j)

  2. 确定递推公式:

    2.1 s[i-1]=t[j-1]:t中找到了一个字符,在s中也出现,即dp(i)(j)=dp(i-1)(j-1)+1

    2.2 s[i-1]!=t[j-1]:t下标j-1位置的字符和s下标i-1位置的字符不同,即dp(i)(j)=dp(i)(j-1)

  3. dp数组初始化:dp(i)(0)和dp(0)(j)位置的元素没有意义

  4. 确定遍历顺序:从上到下

  5. 举例推导:

    image-20240628212343012

36.2.2代码实现

	public boolean isSubsequence(String s, String t) {int[][] dp=new int[s.length()+1][t.length()+1];for(int i=1;i<=s.length();i++){for(int j=1;j<=t.length();j++){if(s.charAt(i-1)==t.charAt(j-1)){dp[i][j]=dp[i-1][j-1]+1;}else{dp[i][j]=dp[i][j-1];}}}return dp[s.length()][t.length()]==s.length();}

37.不同的子序列

37.1题目

给你两个字符串 st ,统计并返回在 s子序列t 出现的个数,结果需要对 109 + 7 取模。

  • 示例一:
输入:s = "rabbbit", t = "rabbit"
输出:3
解释:
如下所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。
rabbbit
rabbbit
rabbbit
  • 示例二:
输入:s = "babgbag", t = "bag"
输出:5
解释:
如下所示, 有 5 种可以从 s 中得到 "bag" 的方案。 
babgbag
babgbag
babgbag
babgbag
babgbag

37.2解法:动规

37.2.1动规思路

  1. 求解:求子序列s组装成t的几种方法!!!

  2. 确定dp数组以及下标含义:

    dp(i)(j):以下标i-1为结尾的s子序列中 出现 以下标j-1为结尾的t子序列的个数 为dp(i)(j)

  3. 确定递推公式:

    3.1 s[i-1]=j[j-1]:两种情况,取s[i-1]或不取,即dp(i)(j)=dp(i-1)(j-1)+dp(i-1)(j)

    3.2 s[i-1]!=[j-1]:只能不取s[i-1],即dp(i)(j)=dp(i-1)(j)

  4. dp数组初始化:

    dp(i)(0):子序列s组装成空串的方法肯定有一种

    dp(0)(j):无意义

  5. 确定遍历顺序:从上到下

  6. 举例推导:

    image-20240628215052748

37.2.2代码实现

	public int numDistinct(String s, String t) {int[][] dp=new int[s.length()+1][t.length()+1];//初始化for(int i=0;i<=s.length();i++){dp[i][0]=1;}for(int i=1;i<=s.length();i++){for(int j=1;j<=t.length();j++){if(s.charAt(i-1)==t.charAt(j-1)){//两种情况:取/不取dp[i][j]=dp[i-1][j-1]+dp[i-1][j];}else{dp[i][j]=dp[i-1][j];}}}return dp[s.length()][t.length()];}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tensorflow Lite移动平台编译

Android平台编译 如果不做定制化操作,我们不需要自己编译TensorFlow Lite Android库。我们可以直接使用位于MavenCentral的TensorFlow Lite AAR。但是在某些情况下,我们需要本地编译TensorFlow Lite。例如,您可能正在构建一个包含operations selected from TensorFlow的自定…

探索机器学习——构建简单的线性回归模型

目录 引言 什么是线性回归&#xff1f; 为什么选择线性回归&#xff1f; 简单性&#xff1a;线性回归模型易于理解和实现。 基础性&#xff1a;它是许多更复杂模型的基础。 应用广泛&#xff1a;在金融、经济、生物统计学等领域有广泛应用。 构建线性回归模型 数据准备…

UNet进行病理图像分割

数据集链接:https://pan.baidu.com/s/1IBe_P0AyHgZC39NqzOxZhA?pwd=nztc 提取码:nztc UNet模型import torch import torch.nn as nnclass conv_block(nn.Module):def __init__(self, ch_in, ch_out):super(conv_block, self).__init__()self.conv = nn.Sequential(nn.Conv2d…

Python-算法编程100例-滑动窗口(入门级)

题目1&#xff1a;最大连续1的个数&#xff08;简单&#xff09; 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 解答&#xff1a;前缀和双指针 # 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 from typing import Listclass So…

笔记本电脑为什么可以链接热点,却无法连接WiFi

① 在开始菜单的搜索栏中&#xff0c;输入 cmd 。 ② 右击上方该程序&#xff0c;选择 以管理员身份运行 ③ 输入&#xff1a;nestsh winsock reset ④ 敲击回车&#xff0c;显示如下页面 ⑤ 再输入 ipconfig/flushdns 回车 ⑥ 然后重启电脑&#xff0c;OVER&#xff01;

供应商绩效仪表板:如何高效考察供应商

供应商在提供满足客户需求的商品和服务方面发挥着关键作用&#xff0c;因此企业必须监控和评估其绩效。 在当今快节奏的商业环境中&#xff0c;手动跟踪供应商数据非常耗时&#xff0c;且容易出错。供应商绩效仪表盘这时就派上用场了——这是一种非常有价值的工具&#xff0c;…

98、验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题解&#xff1a;若要验证是…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言&#xff0c;为什么呢&#xff1f; 可能很多读者都知道&#xff0c;Python 的解释器是用 C 语言写的&#xff0c;所以其实我们在谈论 “Python” 的时候&#xff0c;99.9% 的情况说的就是 “CPython”&#xff01; CPython 是目前最流行的…

使用Oracle IMP导入数据

使用Oracle IMP导入数据 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊一聊如何使用Oracle的IMP工具来导入数据。 一、什么是Oracle IMP Oracle…

SD-WAN组网对比传统组网的优势

随着商业环境的迅速变化&#xff0c;企业对网络连接的需求不断增长。传统组网方案已经难以满足现代企业的需求&#xff0c;而作为一种新兴的网络解决方案&#xff0c;SD-WAN正逐渐受到企业的青睐。那么&#xff0c;SD-WAN究竟在哪些方面优于传统组网方案呢&#xff1f; 灵活性 …

程序设计竞赛中的计算几何——计算几何中的几何量表示

2.1 计算几何中的几何量表示 2.1.1 点的表示 二维平面中 &#xff1a; 横坐标x 和 纵坐标y struct point{double x , y ; }三维中 &#xff1a; x , y , z 2.1.2 向量的表示 struct vec{point start ; point end ; } // 起始点终止点表示法struct vec{double x , y ; } /…

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…

# [0628] Task04 DQN 算法及进阶

easy-rl PDF版本 笔记整理 P6 - P8 joyrl 比对 补充 P7 - P8 相关 代码 整理 待整理 &#xff01;&#xff01; 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1i…

如何优化Spring Boot应用的性能

如何优化Spring Boot应用的性能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何通过优化技术和最佳实践来提升Spring Boot应用的性能&#x…

第二节:如何使用thymeleaf渲染html(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;今天来学习如何使用thymeleaf渲染html。该模板运用不广泛&#xff0c;所以本节内容了解既可。 第一步&#xff1a;创建html文件。 在模板templates目录下创建一个html文件。 编写代码如下&#xff1a; <!DOCTYPE html> <…

RocketMQ快速入门:事务消息原理及实现(十)

目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现&#xff08;适用于spring框架&#xff09;2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息&#xff0c;这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用&#xff0…

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

c++算法学习,最大区间

给定一个实数序列&#xff0c;设计一个最有效的算法&#xff0c;找到一个总和数最大的区间 #include <iostream> #include <vector> #include <limits>// 结果结构体&#xff0c;用于存储最大子数组的信息 struct Result {int maxSum; // 最大和int start;…

49-5 内网渗透 - 服务注册表权限脆弱提权

一、服务注册表权限脆弱提权介绍 Windows操作系统中的注册表存储了每个系统服务的相关条目。注册表使用访问控制列表(ACL)来管理用户对其条目的访问权限。如果注册表的ACL配置不正确,可能导致低权限用户获得对服务注册表的写入权限。攻击者可以利用这一漏洞修改注册表内容,…