【动态规划算法练习】day12

文章目录

  • 一、978. 最长湍流子数组
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、413. 等差数列划分
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、1567. 乘积为正数的最长子数组长度
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、978. 最长湍流子数组

1.题目简介

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

2.解题思路

3.代码

class Solution {
public:int maxTurbulenceSize(vector<int>& arr) {vector<int> dp(arr.size(), 1);//至少有自己一个元素作为湍流数组//dp[i]表示以i元素结尾的湍流数组的最大长度int ret = 1;int prev = 0, cur = 0;for(int i = 1;i < arr.size(); ++i){cur = arr[i] - arr[i - 1];//1.如果当前元素与它之前的两个元素可以构成湍流数组,则它可以加入以i-1为结尾的湍流数组,组成一个更大的数组//2.如果当前元素与它之前的两个元素不可以构成湍流数组,但它和前一个元素不相同,则它和前一个元素组成一个湍流数组//3.如果当前元素与它之前的两个元素不可以构成湍流数组,同时它与前一个元素相同,则它只能自己是一个湍流数组if((prev == 0 && cur != 0) || (prev < 0 && cur > 0) || (prev > 0 && cur < 0)){dp[i] = dp[i - 1] + 1;}else if(arr[i] != arr[i - 1]){dp[i] = 2;}ret = max(ret, dp[i]);prev = cur;}return ret;}
};

4.运行结果

在这里插入图片描述

二、413. 等差数列划分

1.题目简介

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

2.解题思路

3.代码

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {if(nums.size() < 3) return 0;vector<int> dp(nums.size(), 0);//dp[i]表示以i为结尾的等差数列个数int ret = 0;int prev = 0, cur = 0;for(int i = 2;i < nums.size(); ++i){prev = nums[i - 1] - nums[i - 2];cur = nums[i] - nums[i - 1];if(prev == cur){dp[i] = dp[i - 1] + 1;}prev = cur;ret += dp[i];}return ret;}
};

4.运行结果

在这里插入图片描述

三、1567. 乘积为正数的最长子数组长度

1.题目简介

1567. 乘积为正数的最长子数组长度
给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。
一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
请你返回乘积为正数的最长子数组长度。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:int getMaxLen(vector<int>& nums) {vector<int> f(nums.size(), 0);//f[i]表示以i元素为结尾的乘积为正书的最长子数组的长度vector<int> g(nums.size(), 0);//f[i]表示以i元素为结尾的乘积为负书的最长子数组的长度int ret = 0;//初始化(初始化第一个元素对应的dp数组值)if(nums[0] > 0){f[0] = 1;ret = 1;}else if(nums[0] < 0){g[0] = 1;}for(int i = 1;i < nums.size(); ++i){if(nums[i] > 0){if(f[i - 1])//如果正数数组有值,则它与正数的乘积为正数f[i] = f[i - 1] + 1;elsef[i] = 1;if(g[i - 1])//如果负数数组有值,则它与正数的乘积为负数g[i] = g[i - 1] + 1;}else if(nums[i] < 0){if(g[i - 1])//如果负数数组有值,则它与负数的乘积为正数f[i] = g[i - 1] + 1;if(f[i - 1])//如果正数数组有值,则它与负数的乘积为负数g[i] = f[i - 1] + 1;elseg[i] = 1;}else{f[i] = g[i] = 0;}ret = max(ret, f[i]);}return ret;}
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第12天。
生命不息,奋斗不止 ,继续加油。
文中题目来源:力扣(LeetCode),著作权归领扣网络所有。
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

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

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

相关文章

vue项目 ‘npm run dev‘ 报错 npm ERR! errno 134

npm ERR! errno 134 表示 npm 执行出现了致命错误&#xff0c;通常是由于内存不足或程序崩溃导致的。 这时需要我们分配更多的内存给vue-cli-service serve 解决方案 1. 安装increase-memory-limit cross-env依赖 npm install increase-memory-limit cross-env increase-mem…

2023黑马头条.微服务项目.跟学笔记(二)

2023黑马头条.微服务项目.跟学笔记 二 app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO今日简介学习内容1.文章列表加载1.1 需求分析1.2 表结构分析思考:表的垂直拆分 1.3 导入文章数据库1.3.1 导入数据库1.3.2 导入对应的实体类总结 1.4 实现思路1.4.1 sql练习…

界面控件Telerik UI for WPF R2 2023——拥有全新的Windows 11精简主题

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。Telerik UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visua…

idea自定义类注释以及方法注释,无警告

背景 idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果 类 方法 正式&#xff1a;类 设置 代码 /** * author: 你的名字* date: ${DATE} on ${TIME}* desc: $NAME*/注意&#xff0c;请全部复制&#xff0c;空行也要&#xff0c;看设置截图选中部分 …

使用Megascans,Blender和Substance 3D画家创建渔人旅馆(p2)

今天云渲染小编接着Polina Tarakanova分享的Fishermans Inn项目上篇分享&#xff0c;下篇主要是纹理和材料、组装场景、照明等方面的分享。 纹理和材料 随着酒馆的模块化建设完成&#xff0c;是时候进入贴图阶段了。我使用Substance 3D Painter进行了所有的贴图工作。在我的场…

python实现削苹果小游戏

也不用998只有199源码发你。 支付完发我邮箱发你源代码。

elment-ui的Cascader 级联选择器,点击lable 也能选中前面的复选框

直接mounted里加就OK啦 mounted() {// Cascader 级联选择器: 点击文本就让它自动点击前面的input就可以触发选择。setInterval(function() {document.querySelectorAll(.el-cascader-node__label).forEach(el > {el.onclick function() {if (this.previousElementSibl…

计算机视觉:3*3卷积核的优势

本文重点 如果你了解卷积神经网络,那么你一定会注意到大多数卷积神经网络模型经常使用3*3的卷积核,甚至是1*1的,而5*5的都少用,这是为什么呢?本文对3*3的卷积神经网络的好处进行总结。 参数量少 在卷积神经网络中,卷积核的大小决定了模型的参数量。3*3的卷积核比5*5…

jenkins邮箱设置报:501 mail from address must be same as authorization user

jenkins配置邮箱时遇到如下错误&#xff1a;501 mail from address must be same as authorization user 原因是管理员邮箱地址与发送邮箱地址不统一&#xff0c;配置管理员邮件地址&#xff1a;系统管理-系统配置-Jenkins Location&#xff0c;输入与发件人统一的地址即可

【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【STM32】基于stm32的阿里云智能家居

摘 要 智能家居是一种通过物联网将家里的各种电器设备连接在一起&#xff0c;并由中心控制器统一管理的信息系统。系统的核心是各类家居信息的采集与处理。阿里云能够提供云端的数据存储和分析功能&#xff0c;可以作为智能家居中心控制器的重要平台。 本文主要研究了基于阿里云…

时间触发嵌入式系统:各种系统的概念

1.1 引言 一说到软件系统&#xff0c;脑子里面就会闪现很多名词&#xff1a; 信息系统 桌面应用系统 实时系统 嵌入式系统 事件触发系统 时间触发系统 这些名字搞得脑子很乱&#xff0c;感觉都熟悉&#xff0c;又有些陌生&#xff0c;还是需要简单的介绍一下。 1.2 信息系统…