子数组最大累加和2

news/2025/1/13 11:08:16/文章来源:https://www.cnblogs.com/yaoguyuan/p/18668241

[Algo] 子数组最大累加和2

1. 乘积最大子数组

// 1. 乘积最大子数组
// https://leetcode.cn/problems/maximum-product-subarray/
int maxProduct(vector<int>& nums) {int n = nums.size();vector<int> dp_min(n), dp_max(n);dp_min[0] = nums[0]; dp_max[0] = nums[0];int ans = dp_max[0];for (int i = 1; i < n; i++){dp_min[i] = min(nums[i], min(nums[i] * dp_min[i - 1], nums[i] * dp_max[i - 1]));dp_max[i] = max(nums[i], max(nums[i] * dp_min[i - 1], nums[i] * dp_max[i - 1]));ans = max(ans, dp_max[i]);}return ans;
}

2. 子序列累加和必须被7整除的最大累加和

// 2. 子序列累加和必须被7整除的最大累加和
int maxSumDividedBy7(vector<int>& nums) {int n = nums.size();vector<vector<int>> dp(n + 1, vector<int>(7));// dp[i][j]: 前n个数中累加和模7为j的最大累加和, -1表示不存在dp[0][0] = 0;for (int j = 1; j < 7; j++) dp[0][j] = -1;for (int i = 1; i <= n; i++){int cur = nums[i - 1] % 7;for (int j = 0; j < 7; j++){int need = j >= cur ? j - cur : j + 7 - cur;dp[i][j] = dp[i - 1][j];if (dp[i - 1][need] != -1) dp[i][j] = max(dp[i - 1][j], nums[i - 1] + dp[i - 1][need]);}}return dp[n][0];
}

3. 魔法卷轴i

// 3. 魔法卷轴i
// 给定一个数组nums,其中可能有正、负、0
// 每个魔法卷轴可以把nums中连续的一段全变成0
// 你希望数组整体的累加和尽可能大
// 卷轴使不使用、使用多少随意,但一共只有2个魔法卷轴
// 请返回数组尽可能大的累加和
int magicScroll(vector<int> &nums)
{int p0 = 0;for (int num : nums) p0 += num; // p0: 不使用魔法卷轴的累加和vector<int> dp(nums.size());  // dp[i]: nums[0...i]使用一次魔法卷轴的最大累加和int prefix = nums[0], maxPrefix = max(0, nums[0]);for (int i = 1; i < nums.size(); i++){dp[i] = max(nums[i] + dp[i - 1], maxPrefix);prefix += nums[i];maxPrefix = max(maxPrefix, prefix);}int p1 = dp[nums.size() - 1]; // p1: 使用1次魔法卷轴的最大累加和vector<int> dp_(nums.size()); // dp_[i]: nums[i...n-1]使用一次魔法卷轴的最大累加和dp_[nums.size() - 1] = 0;int suffix = nums[nums.size() - 1], maxSuffix = max(0, nums[nums.size() - 1]);for (int i = nums.size() - 2; i >= 0; i--){dp_[i] = max(nums[i] + dp_[i + 1], maxSuffix);suffix += nums[i];maxSuffix = max(maxSuffix, suffix);}int p2 = INT32_MIN;for (int k = 1; k < nums.size() - 1; k++)p2 = max(p2, nums[k] + dp[k - 1] + dp_[k + 1]); // p2: 使用2次魔法卷轴的最大累加和return max(p0, max(p1, p2));
}

4. 魔法卷轴ii

// 4. 魔法卷轴ii
// 给定一个数组nums,
// 现在允许你随意选择数组连续一段进行翻转,也就是子数组逆序的调整
// 比如翻转[1,2,3,4,5,6]的[2~4]范围,得到的是[1,2,5,4,3,6]
// 返回必须随意翻转1次之后,子数组的最大累加和
int MagicScroll(vector<int> &nums)
{int n = nums.size();vector<int> original(n);original[n - 1] = nums[n - 1]; // original[i]: nums[i...n-1]中以i为开始位置的最大累加和for (int i = n - 2; i >= 0; i--) original[i] = max(nums[i], nums[i] + original[i + 1]);int end = nums[0], maxEnd = nums[0], ans = INT32_MIN;// end: nums[0...i]中以i为结束位置的最大累加和// maxEnd: nums[0...i]中的最大累加和for (int i = 1; i < n; i++){ans = max(ans, maxEnd + original[i]);end = max(nums[i], nums[i] + end);maxEnd = max(maxEnd, end);}return max(ans, maxEnd);
}

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

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

相关文章

rk3568屏幕抖动问题

问题描述:有时候操作屏幕界面,发现屏幕有抖动的情况。经跟RK原厂沟通,此问题跟给ddr供电的vdd_logic有关系。vdd_logic默认定义:vdd_logic: DCDC_REG1 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = <500000>;regulator-max-microvolt = <13…

B@se-还原错误字母表转码的base64编码

题目: 密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD== JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/oh holy shit, something is missing... 第一行是密文,有明显的Base64编码特征(等号结尾) 第二行是大小写字母、数字、+、/,有明显的…

打开浏览器Chrome跳转指定页面并全屏打开

办法来源于https://blog.csdn.net/shaofengzong/article/details/119928096 主要用于大屏数据可视化的项目,设置电脑自启动后,打开浏览器的同时默认跳转指定页面并全屏打开。、 办法通过增加谷歌浏览器的启动参数进行实现。 两种方式实现,需要根据需求进行选择默认全屏打开指…

板栗看板:让供应商全生命周期管理变得如此简单

供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结构化、全流程的供应商闭环管理过程,旨在优化供应商关系,提高供应链的整体效率和可持续性。以下是对供应商全生命周期管理的详细阐述供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结…

协作管理工具在多部门协作中的优势与应用

一、跨职能团队协作的挑战 跨职能团队的协作面临多个方面的挑战,这些挑战往往会影响团队的工作效率、项目的推进速度以及最终的项目质量。 1.1 信息传递不畅在跨职能团队中,成员来自不同的部门,各自拥有不同的背景、职责和目标。因此,团队成员之间的沟通可能不够顺畅,信息…

side channel

‌Side Channel‌,中文称为“边信道”,是指通过加密软件或硬件运行时产生的各种泄漏信息来获取密文信息的攻击方式。在狭义上,边信道攻击特指针对密码算法的非侵入式攻击,通过分析加密电子设备在运行过程中的边信道信息泄露来破解密码算法。常见的边信道攻击包括计时攻击、…

RocketMQ工具的使用方法

RocketMQ简介 启动rocketmq-Dashboard项目 输入 http://localhost:8888/#/ 即可到rocketmq界面 整体横向菜单分为八个部分:OPS(运维):主要是设置nameserver和配置vipchannel Dashboard(驾驶舱):控制台的dashboard,可以分别按broker和主题来查看消息的数量和趋势。 Cluster(…

【docker】docker desktop换国内源时 apply按钮为灰色or换源失败 解决方法

配docker环境时复制进去国内镜像源后,发现apply按钮为灰色,点不了,如下图解决方法:往下滑,找到下图圈住的选项打勾再回到Docker Engine界面,发现可以点apply按钮了在文本框中添加"registry-mirrors": ["http://mirrors.ustc.edu.cn","http://mi…

ElasticSearch在Windows环境搭建测试

引子 也持续关注大数据相关内容一段时间,大数据内容很多。想了下还是从目前项目需求侧出发,进行相关学习。Elasticsearch(ES)是位于 Elastic Stack(ELK stack) 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch…

科研绘图系列:python语言绘制SCI图合集

介绍 科研绘图系列:python语言绘制SCI图合集 加载python import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.patches as mpatches import seaborn as snsfrom statsmodels.stats.multitest import multipletests# Setup for local r…

Postman相关

postman打开控制台的快捷键alt+ctrl+c1、工具栏 New: 新建,可以新建Request请求,Collection请求集,环境等等 Import: 导入,可以导入别人导出的请求集 Runner: 运行一个请求集(批量执行) Invite: 邀请(需要注册,邀请进行协作) 同步图标: (需要注册,同步你的项目到云…

TorchOptimizer:基于贝叶斯优化的PyTorch Lightning超参数调优框架

超参数优化是深度学习模型开发过程中的一个核心技术难点。合适的超参数组合能够显著提升模型性能,但优化过程往往需要消耗大量计算资源和时间。本文介绍TorchOptimizer,这是一个基于贝叶斯优化方法的超参数优化框架,专门用于优化PyTorch Lightning模型的超参数配置。TorchOp…