当前位置: 首页 > news >正文

918. 环形子数组的最大和

918. 环形子数组的最大和

给定一个长度为 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 。

示例 1:

输入:nums = [1,-2,3,-2]
输出:3
解释:从子数组 [3] 得到最大和 3

示例 2:

输入:nums = [5,-3,5]
输出:10
解释:从子数组 [5,5] 得到最大和 5 + 5 = 10

示例 3:

输入:nums = [3,-2,2,-3]
输出:3
解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3

提示:

  • n == nums.length
  • 1 <= n <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104

 

class Solution {
public:int maxSubarraySumCircular(vector<int>& nums) {int n=nums.size();vector<vector<int>> dp(n,vector<int>(2,nums[0]));dp[0][0]=nums[0];dp[0][1]=nums[0];int sum=nums[0],maxn=nums[0],minn=nums[0];for(int i=1;i<n;i++){//每个元素都当做是子数组的最后一个元素,分别求出两个状态,最大子数组和和最小子数组和dp[i][0]=max(dp[i-1][0]+nums[i],nums[i]);maxn=max(dp[i][0],maxn);dp[i][1]=min(dp[i-1][1]+nums[i],nums[i]);minn=min(dp[i][1],minn);sum+=nums[i];}return maxn>0?max(maxn,sum-minn):maxn;}
};

http://www.lryc.cn/news/105238.html

相关文章:

  • AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务
  • C语言文件指针设置偏移量--fseek
  • 快速消除视频的原声的技巧分享
  • lua脚本实现Redis令牌桶限流
  • 最新 23 届计算机校招薪资汇总
  • BUU CODE REVIEW 1
  • django使用ztree实现树状结构效果,子节点实现动态加载(l懒加载)
  • 认识springboot 之 了解它的日志 -4
  • 关于大规模数据处理的解决方案
  • 免费快速下载省市区县行政区的Shp数据
  • MAC下配置android-sdk
  • Hive-数据倾斜
  • Java多线程(三)
  • Linux操作系统3-项目部署
  • 软件测试面试题——接口自动化测试怎么做?
  • 如何在医疗器械行业运用IPD?
  • 16. Spring Boot 统一功能处理
  • PostgreSQL-数据库命令
  • 面试题:说说JavaScript中内存泄漏的几种情况?垃圾回收机制
  • HTML基础介绍1
  • 【腾讯云 Cloud Studio 实战训练营】Redisgo_task 分布式锁实现
  • Linux CentOS系统怎么下载软件
  • SNAT和DNAT原理与应用
  • Java8实战-总结11
  • 2023爱分析·低代码厂商全景报告|爱分析报告
  • 视频两侧有黑边怎么处理?教你裁切视频黑边方法
  • 如何设计一个Android端高性能日志监控系统
  • maven下载按照及初次使用相关配置
  • opencv05-掩膜
  • 通讯软件013——分分钟学会Kepware OPC AE Server仿真配置