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

【动态规划-最大子段和】力扣1191. K 次串联后最大子数组之和

给定一个整数数组 arr 和一个整数 k ,通过重复 k 次来修改数组。

例如,如果 arr = [1, 2] , k = 3 ,那么修改后的数组将是 [1, 2, 1, 2, 1, 2] 。

返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0,在这种情况下它的总和也是 0。

由于 结果可能会很大,需要返回的 109 + 7 的 模 。

示例 1:
输入:arr = [1,2], k = 3
输出:9

示例 2:
输入:arr = [1,-2,1], k = 5
输出:2

示例 3:
输入:arr = [-1,-2], k = 7
输出:0
在这里插入图片描述

class Solution {
public:int kConcatenationMaxSum(vector<int>& arr, int k) {int MOD = 1e9 + 7;long long sum = 0;long long maxAns = 0;long long pre = 0, maxMid = 0;for(int &num : arr){sum += num;maxAns = max(maxAns, sum);pre = max(pre + num, (long long)num);maxMid = max(maxMid, pre);}if(k == 1){return maxMid % MOD;}//最大后缀和long long maxAns2 = 0;long long sum2 = 0;for(int i = arr.size() - 1; i >= 0 ; i--){sum2 += arr[i];maxAns2 = max(maxAns2, sum2);}int theMax;if(sum > 0){theMax = max((k-2) * sum + maxAns + maxAns2, maxMid)%MOD;}else if(sum <= 0){theMax = max(maxMid,maxAns + maxAns2)%MOD;}return theMax;}
};

本题没有官解,也没有看到统一的比较好的题解。这道题主要是要考虑各种情况,可以先列出所有的情况,最后再进行代码优化,将类似的情况整理在一起。maxMid是最大子段和,使用的是Kadane算法,maxAns是最大前缀和,maxAns2是最大后缀和。首先如果当k为1的时候,最大子段和就是maxMid。接下来讨论sum的情况,如果sum>0,就要比较两种情况,一种是复制的2到k-1组元素的和加上第一组元素的最大后缀和再加上最后一组元素的最大前缀和,第二种情况是第一组元素中的最大子段和就是整个复制过的数组的最大子段和。当sum<=0的时候,也要比较两种情况哪个大,第一种是第一组元素中的最大子段和,第二种是最大前缀和加上最大后缀和(例如第一组元素的最大后缀和加上第二组元素的最大前缀和)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分享一个基于Node.js和Vue的农产品销售与交流平台(源码、调试、LW、开题、PPT)
  • XAI在教育领域的应用:偏见与公平
  • 【C++/STL】map和set的封装(红黑树)
  • 常见锁策略
  • anaconda下载库的方法
  • JAVA 继承和多态
  • AI 时代,Java 程序员不可不知的两个开发框架
  • 二分查找法
  • 2024年,5款高效的文献翻译工具清单。
  • C语言从头学42——预处理指令(一)
  • 【熊猫派对】
  • vim使用技巧
  • Mysql-窗口函数一
  • Animate软件动画类型简介
  • LabVIEW水下根石监测系统
  • [译]CSS 居中(Center)方法大合集
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Docker: 容器互访的三种方式
  • javascript 总结(常用工具类的封装)
  • Javascript编码规范
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Java深入 - 深入理解Java集合
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Mysql数据库的条件查询语句
  • nginx 负载服务器优化
  • Octave 入门
  • react 代码优化(一) ——事件处理
  • vue中实现单选
  • windows下mongoDB的环境配置
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 简单实现一个textarea自适应高度
  • 详解移动APP与web APP的区别
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • PostgreSQL之连接数修改
  • 带你开发类似Pokemon Go的AR游戏
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (¥1011)-(一千零一拾一元整)输出
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (转)Linux整合apache和tomcat构建Web服务器
  • 、写入Shellcode到注册表上线
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net Signalr 使用笔记
  • .net 调用海康SDK以及常见的坑解释
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 连接达梦数据库开发环境部署