【刷题篇】动态规划(六)

文章目录

  • 1、最大子数组和
  • 2、环形子数组的最大和
  • 3、乘积最大子数组
  • 4、乘积为正数的最长子数组长度
  • 5、 等差数列划分
  • 6、最长湍流子数组

1、最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
在这里插入图片描述

class Solution {
public:int maxSubArray(vector<int>& nums) {int size=nums.size();vector<int> dp(size+1);int maxi=-0X3F3F3F3F;for(int i=1;i<=size;i++){dp[i]=max(nums[i-1],dp[i-1]+nums[i-1]);maxi=max(maxi,dp[i]);}return maxi;}
};

2、环形子数组的最大和

给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。
环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n] 。
子数组 最多只能包含固定缓冲区 nums 中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], …, nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n 。
在这里插入图片描述

class Solution {
public://分为两种情况考虑int maxSubarraySumCircular(vector<int>& nums) {int n=nums.size();vector<int> d(n+1),p(n+1);int maxi=-0x3F3F3F3F,mini=0x3F3F3F3F,sum=0;for(int i=1;i<=n;i++){   int x=nums[i-1];d[i]=max(x,d[i-1]+x);maxi=max(d[i],maxi);p[i]=min(x,p[i-1]+x);mini=min(mini,p[i]);sum+=x;} return sum==mini?maxi:max((sum-mini),maxi);}
};

3、乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
子数组 是数组的连续子序列
在这里插入图片描述

class Solution {
public:int maxProduct(vector<int>& nums) {int n=nums.size();//d最大值,p最小值vector<int> d(n+1),p(n+1);d[0]=p[0]=1;int maxi=-0x3F3F3F3F;for(int i=1;i<=n;i++){int x=nums[i-1],a=d[i-1]*nums[i-1],b=p[i-1]*nums[i-1];d[i]=max(x,max(a,b));p[i]=min(x,min(a,b));maxi=max(maxi,d[i]);}   return maxi;}
};

4、乘积为正数的最长子数组长度

给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。
一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
请你返回乘积为正数的最长子数组长度。

在这里插入图片描述

class Solution {
public:int getMaxLen(vector<int>& nums) {int n=nums.size();vector<int> d(n+1),p(n+1);//一个放正数,一个放负数d[0]=p[0]=0;int maxi=-0x3F3F3F3F;for(int i=1;i<=n;i++){if(nums[i-1]>0){d[i]=d[i-1]+1;p[i]=p[i-1]==0?0:p[i-1]+1;}else if(nums[i-1]<0){d[i]=p[i-1]==0?0:p[i-1]+1;p[i]=d[i-1]+1;}maxi=max(maxi,d[i]);}return maxi;}   
};

5、 等差数列划分

如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
在这里插入图片描述

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n=nums.size();vector<int> dp(n);int sum=0;for(int i=2;i<n;i++){dp[i]=nums[i]-nums[i-1]==nums[i-1]-nums[i-2]?dp[i-1]+1:0;sum+=dp[i];}return sum;}
};

6、最长湍流子数组

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。
如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。
更正式地来说,当 arr 的子数组 A[i], A[i+1], …, A[j] 满足仅满足下列条件时,我们称其为湍流子数组:
在这里插入图片描述

class Solution {
public:int maxTurbulenceSize(vector<int>& arr) {int n=arr.size();vector<int> d(n,1),p(n,1);if(n==1)return 1;int maxi=-0x3F3F3F3F;for(int i=1;i<n;i++){if(arr[i-1]<arr[i])d[i]=p[i-1]+1;else if(arr[i-1]>arr[i])p[i]=d[i-1]+1;maxi=max(maxi,max(d[i],p[i]));}return maxi;}
};

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

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

相关文章

【Unity动画】Avatar Mask

创建 Avatar Mask可以设置那一部分骨骼运动和不运动 然后放在状态机里面的层中来混合 【后续完善】

深入探索 Rust 宏编程

Rust 宏提供了一种强大的方法来编写抽象和重用代码,它们在 Rust 编程中扮演着重要的角色。本文将深入探索 Rust 宏的概念、类型、使用方法以及如何实现自定义宏,以提供一个全面的 Rust 宏编程指南。 Rust 宏简介 宏是 Rust 中的一种元编程工具,它们在编译时运行,用于生成…

linux安装node

文章目录 安装node 安装node 一次手操记录 - 首先安装wget yum install -y wget - 下载nodejs最新的tar包 wget https://cdn.npm.taobao.org/dist/node/v12.12.0/node-v12.12.0-linux-x64.tar.xz - 解压包 tar -xvf node-v12.12.0-linux-x64.tar.xz - 部署bin文件 先确认你no…

30 张图解 HTTP 常见的面试题

前言 在面试过程中&#xff0c;HTTP 被提问的概率还是比较高的 我搜集了 5 大类 HTTP 面试常问的题目&#xff0c;同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的&#xff0c;通过问答 图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP 协议。 HTTP 基本概…

第四节JavaScript 条件语句、循环语句、break与continue语句

一、JavaScript条件语句 在通常的代码中&#xff0c;我们有一些需要决定执行不同动作&#xff0c;这就可以在代码中使用条件语句来完成。 下面是我们常使用的条件语句&#xff1a; if语句&#xff1a;只有当指定条件是true时&#xff0c;执行条件内代码。if…else语句&#…

JavaScript数组的长度

JavaScript数组的长度可以通过数组对象的length属性来获取&#xff0c;长度表示数组中元素的数量。 代码示例&#xff1a; let arr []; // 定义一个空数组 console.log(arr.length); // 输出 0arr.push(1); // 给数组添加元素 arr.push(2); arr.push(3); console.log(arr.le…

项目二 创建与操作学生管理数据库

项目二 创建与操作学生管理数据库 #目标 创建库&#xff1b;查看库&#xff1b;操作库&#xff1b;图形工具操作库1&#xff0c;创建学生管理数据库 #创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

44.0/认识前端

44.1 目录 44.1.1 网页 44.1.1.1 网页的组成 44.1.1.2 网页的分类 44.1.2 网站 44.1.2.1 网站的分类 44.1.3 主页 44.2. Internet、IP 地址和域名 44.2.1 Internet 44.2.2 IP 44.2.3 域名 44.3. Web 前端技术概述 44.3.1 html5 44.3.2 CSS3 44.3.3 Javascript …

hbuiler中使用npm安装datav

注&#xff1a;datav边框样式目前使用时&#xff1a;适用于网页&#xff0c;不适用于app 1、先安装node 安装、配置Node路径 2、为Node配置环境变量 3、在hbuilder的设置中填写node的路径 配置 4、打开cmd输入npm install jiaminghi/data-view 安装dataV&#xff0c;&…

当初为什么选择计算机-希望一直干下去

还记得当初自己为什么选择计算机&#xff1f; 当初你问我为什么选择计算机&#xff0c;我笑着回答&#xff1a;“因为我梦想成为神奇的码农&#xff01;我想像编织魔法一样编写程序&#xff0c;创造出炫酷的虚拟世界&#xff01;”谁知道&#xff0c;我刚入门的那天&#xff0…

.360勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

尊敬的读者&#xff1a; 在数字时代&#xff0c;.360勒索病毒如同数字的幽灵&#xff0c;悄无声息地侵入用户的数字领域&#xff0c;将珍贵的数据文件变为数字的囚牢。本文将介绍.360勒索病毒的特征&#xff0c;提供解密和数据恢复的方法&#xff0c;并分享有效的预防措施&…

【PID学习笔记 9 】控制系统的分析方法之二

写在前面 前文重点介绍时域分析法、本文将继续学习控制系统的另外几种分析方法&#xff0c;包括根轨迹法、频率分析法、状态空间分析法。再次强调&#xff0c;在这里只是做了一个系统化的概述&#xff0c;目的是让学习PID&#xff0c;特别是用PID的工程人员有一个对基础知识的…

【开源】基于JAVA语言的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…

SELinux零知识学习三十八、SELinux策略语言之约束(2)

接前一篇文章:SELinux零知识学习三十七、SELinux策略语言之约束(1) 四、SELinux策略语言之约束 SELinux对策略允许的访问提供了更严格的约束机制,不管策略的allow规则如何。 SELinux有两种类型的约束: constrain语句constrain语句是最常见的约束,使得可以基于用户、角色…

3.DevEco Studio安装鸿蒙手机app本地模拟器

配合Intel CPU启动模拟器 解决措施 打开任务管理器&#xff0c;在“性能”选项&#xff0c;检查CPU虚拟化是否已经启用。如果未启用&#xff0c;需要进入电脑的BIOS中&#xff0c;将CPU的“Intel Virtualization Technology”选项开启。 点击New Emulator 文档中心 解决措施…

铁路通信铁塔监测方案

目录 1.监测的背景及意义 1.1监测背景 1.2监测意义 2.系统介绍及特点 2.1系统介绍 2.2系统特点 3.系统设计 3.1监测内容 3.2总体介绍 3.3详细设计 3.3.1垂直度监测 3.3.2水平位移、沉降监测 3.3.3环境监测 3.3.4应力应变监测 3.3.5裂缝监测 3.3.6云平台综合在线…

VBA技术资料MF93:将多个Excel表插入PowerPoint不同位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

TypeScript 之 console的使用

语言&#xff1a; TypeScript 在线工具&#xff1a; PlayGround console console 对象是一个非常强大的控制台日志显示工具&#xff0c; 可以帮助我们在浏览器中调试代码。 注&#xff1a; console不属于TypeScript的语法&#xff0c;而是由JavaScript封装的内置对象。 简单的…

C语言精选——选择题Day42

第一题 1. 下面程序输出的结果是&#xff08;&#xff09; #include <stdio.h> int main () {int x;x printf("I See, Sea in C");printf("x%d" , x); } A&#xff1a;2 B&#xff1a;随机值 C&#xff1a;都不是 D&#xff1a;15 答案及解析 D p…

【Python/Java/C++三种语言】20天拿下华为OD笔试之【位运算】2023B-出错的或电路【欧弟算法】全网注释最详细分类最全的华为OD真题

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 某生产门电路的厂商发现某一批次的或门电路不稳定&#xff0c;具体现象为计…