动态规划7,等差数列划分,湍流子数组,唯一的子字符串,最长递增子序列

等差数列划分

在这里插入图片描述
思路:

  1. 经验+题目要求

dp[i]表示:以 i 位置为结尾的所有子数组中有多少个等差数列

  1. 状态转移方程

对 dp[i] 位置,数列至少有三个元素,如果相邻三个为等差数列,dp[i] = dp[i-1] + 1;
如果相邻三个不为等差数列,dp[i] = 0;
在这里插入图片描述

  1. 初始化

dp[0] 和 dp[1] 位置都不符合判断要求,直接 dp[0] = dp[1] = 0;

  1. 填表顺序
    从左往右,返回表里所有的和。
class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n = nums.size();vector<int> dp(n);int count = 0;for(int i = 2; i<n; i++){if(nums[i]-nums[i-1] == nums[i-1]-nums[i-2])dp[i] = dp[i-1]+1;elsedp[i] = 0;count+=dp[i];}return count;}
};

最长湍流子数组

在这里插入图片描述

什么叫湍流子数组?

像这样一升一降的就叫湍流子数组。
在这里插入图片描述
思路:

1.经验+题目要求

dp[i]表示:以 i 位置为结尾的所有子数组中,最长湍流子数组的长度。

对于本题,如果只定一个状态数组是不够的,因为我们只有区分了 i 位置是在增长还是在降低,才能判断 i + 1 位置是否能续上前面的波浪。所以,我们需要定义两个状态数组,分别表示以 i 结尾的在增长和降低的最长湍流子数组长度。
f[i] 表示:以i 位置为结尾的所有子数组中,最后呈现 “ 上升” 状态下的最长湍流数组的长度。
g[i] 表示:以i 位置为结尾的所有子数组中,最后呈现 “ 下降” 状态下的最长湍流数组的长度。

2.状态转移方程

在这里插入图片描述
在这里插入图片描述

  1. 初始化

单个 存在为1,直接初始化全为1。

  1. 填表

从左往右,两个表一起填写。

class Solution {
public:int maxTurbulenceSize(vector<int>& arr) {int n = arr.size();vector<int> f(n,1);auto g = f;int ret = 1;//最差情况是1,ret写为1;for(int i = 1; i<n; i++){if(arr[i] > arr[i-1]){f[i] = g[i-1] + 1;ret = max(ret,f[i]);}else if(arr[i] < arr[i-1]){g[i] = f[i-1] + 1;ret = max(ret,g[i]);}}return ret;}
};

环绕字符串中唯一的子字符串

在这里插入图片描述

思路:

  1. 经验+题目要求

dp[i]表示:以 i 位置为结尾的所有字串中,有多少个在 base 中出现过。

  1. 状态转移方程

如果长度为1,就是本身字符串为1;
长度大于1:就要看s[i-1] + 1是否等于s[i] ;(特殊情况是“za”的情况)
在这里插入图片描述

  1. 初始化

dp 表里面所有的值都初始化为1。因为每一个本身字符都在base中出现过。

  1. 填表

从左往右填表

去重操作:

对于右边的例子,abc 在 yzabc,zabc都出现过,我们直接取以c结尾的最大的dp值就可以。
在这里插入图片描述

class Solution {
public:int findSubstringInWraproundString(string s) {int n = s.size();vector<int> dp(n,1);for(int i = 1; i<n; i++){if(s[i-1] + 1 == s[i] || (s[i-1] == 'z' && s[i] == 'a'))dp[i] = dp[i-1] + 1;}int hash[26] = {0};for(int i = 0; i<n; i++){hash[s[i] - 'a'] = max(hash[s[i]-'a'],dp[i]);}int sum = 0;for(auto x : hash) sum+=x;return sum;}
};

最长递增子序列

在这里插入图片描述
注意:这里的子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

思路:

  1. 经验+题目要求

dp[i]表示:以 i 位置为结尾的所有子序列中,最长递增子序列的长度。

  1. 状态转移方程

如果长度为1,就为1;
长度大于1,就要找nums[i] 大于 nums(0,j)里面的子序列,大于的话就为dp[i] = dp[j] + 1;
然后每一次找到dp[i] 里面的最大值并记录。

在这里插入图片描述

  1. 初始化

全部初始化为1,因为长度为1,dp[i] 为1.

  1. 填表

从左往右填表:

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n,1);int ret = 1;for(int i = 1; i<n; i++){for(int j = 0; j<i; j++){if(nums[i] > nums[j]){dp[i] = max(dp[j] + 1,dp[i]);}ret = max(ret,dp[i]);}}return ret;}
};

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

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

相关文章

c1月考测试

文章目录 月考技能2月1.某场100公里加速时间比赛中有摩托车&#xff0c;汽车&#xff0c;飞机等&#xff0c;现定义一个Runner类为参赛者,Runner类中增加成员变量加速时间acc_time,现要求使用Runner类实例化motor&#xff0c;car,airplane三个对象&#xff0c;输出比赛的第一名…

windows批处理脚本(cmd指令)

一、简介 最早期的电脑系统是DOS系统&#xff0c;DOS系统只有一个黑漆漆的窗口&#xff0c;需要自己输入命令&#xff0c;所以学习命令是很有必要的&#xff0c;那么CMD命令大全是什么?直到今天的Windows系统&#xff0c;还是离不开DOS命令的操作。如今懂得使用windows批处理脚…

【AI绘画教程】AI绘画图生图怎么用?

AI绘画技术已经越来越成熟&#xff0c;越来越多的人开始尝试利用AI进行创作。而AI绘画图生图作为一款优秀的AI绘画工具&#xff0c;正是帮助许多人创作的好帮手。 AI绘画图生图功能可以通过多种软件实现&#xff0c;具体的操作步骤可能因软件而异&#xff0c;但大体流程相似。以…

基于springboot+vue的会议室预约系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着互联网技术的发展&#xff0c;各行各业乃至人们的衣食住行都离不开网络。就拿最普普通通的衣食住行来说吧&#xff0c;穿衣服、买衣服我们现在基本都是在网络上进行购买&#xff0c;线下商场基本不去。…

身份证联网核查接口 Android身份证实名认证接口调用 二要素核验接口

身份证核验也就是核查身份证的真实性&#xff0c;虽然现有的技术越来越强&#xff0c;但是利益驱使下&#xff0c;不法分子也在想尽各种办法来利用非真实的身份证来实施违法行为。翔云身份证核验接口就可随时为用户提供核查身份证真伪的接口&#xff0c;让实名认证政策落地。 以…

实验二-写一个主程序来上机设计并验证线性表顺序表示的所有操作(至少包含算法2.3、2.4、2.5),并设计一个算法删除所有值大于min而且小于max的元素。

废话不多说&#xff0c;数据结构自己写代码见识了太多的bug&#xff0c;看来还是自己写代码的功夫不到家啊&#xff0c;进入正题。直接上代码。 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 #define ERROR 0 #define OK 1 typedef int ElemType;…

维修住友注塑机 Sumitomo SE50D 工业液晶屏 SE50S工业电脑显示屏

Sumitomo (SHI) Demag 的 NC5 plus 控制器是一款易于使用的控制器&#xff0c;可帮助成型商实现卓越的注塑成型精度。 该控制器作为用户和注塑机之间的通信接口发挥着关键作用。只有通过控制才能访问机器的全部性能属性&#xff0c;从而以各种方式帮助最大限度地提高生产效率。…

1688商品详情数据采集(商品属性,规格,价格,详情图等)

京东商品详情数据采集是一个复杂但重要的过程&#xff0c;它涉及获取商品的详细信息&#xff0c;包括商品属性、规格、价格以及详情图等。以下是关于如何进行京东商品详情数据采集的基本步骤&#xff1a; 确定采集目标&#xff1a;首先&#xff0c;你需要明确需要采集的商品信…

tcp 连接数上限突破

连接数上限条件 文件句柄的限制 一个tcp连接就需要占用一个文件描述符&#xff0c;一旦文件描述符用完&#xff0c;新的连接就会返回给我们错误是&#xff1a;Can’topen so many files。linux系统出于安全角度的考虑&#xff0c;在多个维度对于可打开的文件描述符进行了限制…

unityAB包管理(远程下载)

1.AB包生成脚本 using UnityEngine; using UnityEditor; using System.IO; using System; using System.Collections.Generic;/// <summary> /// AB包创建 /// </summary> public class CreateAssetBundles : MonoBehaviour {public static string BuildAssetBund…

ARM 汇编指令:(五)CMP指令

目录 1.CMP比较指令 2.指令条件码 cond 1.CMP比较指令 CMP指令是计算机指令集中的一种比较指令&#xff0c;用于比较两个操作数的大小关系或相等性&#xff0c;并根据比较结果设置或更新条件码寄存器&#xff08;或程序状态字&#xff09;的标志位。 指令格式&#xff1a;C…

VUE内盘期货配资软件源码国际外盘二合一

开发一个Vue内盘期货配资软件源码&#xff0c;同时兼容国际外盘二合一的功能&#xff0c;是一个复杂且专业的任务&#xff0c;涉及前端Vue.js框架的使用、后端服务器处理、数据库管理、实时交易接口对接等多个方面。下面是一些关于开发此类软件的基本指导和考虑因素&#xff1a…

富格林:洞悉暗箱手法可信策略远离

富格林悉知&#xff0c;在现货黄金中&#xff0c;揭秘很多投资者都是奔着盈利来的&#xff0c;因此学习正规盈利出金技能是必不可少的。但一些投资者在进入市场后并不注意技能的提升&#xff0c;只是一味的看中盈利&#xff0c;这样的做单导致被诱导暗箱亏损的不少&#xff0c;…

什么是同城上门预约按摩系统,上门预约平台有哪些功能?

随着互联网技术的发展&#xff0c;人们的生活方式发生了很大的变化。在日常生活中&#xff0c;大家都习惯使用手机来订餐、购物、家政服务等&#xff0c;这也为我们的生活带来了很大的便利。而同城按摩小程序作为一种新兴的按摩预约方式&#xff0c;受到了越来越多人的欢迎。下…

轻松上手MacOS:HomeBrew安装全指南

轻松上手MacOS&#xff1a;HomeBrew安装全指南 你是否曾为在MacOS上安装软件而烦恼&#xff1f;是否想要一个既强大又简单的包管理器来简化你的安装过程&#xff1f;HomeBrew正是你所需要的工具。作为MacOS上的包管理器&#xff0c;HomeBrew让安装软件变得像数123一样容易。在…

机器视觉检测设备的组成要素

机器视觉检测设备是一种先进的自动化检测技术工具&#xff0c;它利用光学、图像处理和计算机硬件及软件技术模拟并扩展人类的视觉功能&#xff0c;以实现对产品或目标物体进行自动化的尺寸测量、缺陷检测、表面质量评估、颜色识别、形状匹配以及位置判断等功能。这种设备通常包…

GettingStartedwithLLVMCoreLibraries书籍

Getting Started with LLVM Core Libraries 参考1 LLVM是构架编译器(compiler)的框架系统&#xff0c;以C编写而成&#xff0c;用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)&#xff0c;对开…

c/c++| 常规 |sizeof 、strlen

总结来说 &#xff0c;sizeof 查看内存给对象分配的空间大小&#xff0c;不仅仅是普通的内置变量&#xff0c;还包括用户自定义变量、结构体、类对象 然后strlen 是查看字符串的实际长度大小&#xff0c;注意它不会计算那个结束符’\0’

重生奇迹MU攻击防御技能石哪里掉

在《重生奇迹MU》中&#xff0c;攻击和防御技能石可以从以下途径获得&#xff1a; 1.怪物掉落&#xff1a;你可以通过击败怪物获得攻击和防御技能石&#xff0c;不同的怪物掉落不同的石头。你可以在各个地图的怪物掉落表中查看特定怪物掉落的技能石。 2.商店购买&#xff1a;…

【教程】APP加固的那些小事

摘要 APP加固是保护APP代码逻辑的重要手段&#xff0c;通过隐藏、混淆、加密等操作提高软件的逆向成本&#xff0c;降低被破解的几率&#xff0c;保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法&#xff0c;以及处理安装出现问题的情况和资源文件加固策略选择…