1191. K 次串联后最大子数组之和(最大子段和变形)
给你一个整数数组 arr 和一个整数 k。
首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次。
举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]。
然后,请你返回修改后的数组中的最大的子数组之和。
注意,子数组长度可以是 0,在这种情况下它的总和也是 0。
由于 结果可能会很大,所以需要 模(mod) 10^9 + 7 后再返回。
示例 1:
输入:arr = [1,2], k = 3
输出:9
示例 2:
输入:arr = [1,-2,1], k = 5
输出:2
示例 3:
输入:arr = [-1,-2], k = 7
输出:0
提示:
1 <= arr.length <= 10^5
1 <= k <= 10^5
-10^4 <= arr[i] <= 10^4
这个题目,还是要求最大子段和。
①整个数组的和大于0,那么最大值就是sum*(k-1)+max1(原始数组中的最大子段和).
②在整体和不大于0大的情况下,最大值就在max1,max2(连续两段数组的最大子段和)中取到了。
第二种情况一开始想了好多种情况,分类讨论了很多。但是最后才发现,其实就是在max1和max2中取到。
代码如下:
class Solution {public:int mod=1e9+7;int getmax(vector<int>& arr)//得到最大子段和{int _max=0;int sum=0;for(int i=0;i<arr.size();i++){sum=sum+arr[i];sum%=mod;_max=max(_max,sum)%mod;if(sum<0) sum=0;}return _max%mod;}int kConcatenationMaxSum(vector<int>& arr, int k) {int sum=0;vector<int> arr2;int t=2;if(k>=2)//只有在k>=2的时候,才可以构建两个数组while(t--){for(int i=0;i<arr.size();i++) arr2.push_back(arr[i]);}int max1=getmax(arr);int max2=getmax(arr2);for(int i=0;i<arr.size();i++){sum=(sum+arr[i])%mod;}if(sum>0) {long long x=((long long)(k-1)*(long long)sum)+max1;//可能有人会想,为什么不是K*sum,其实x>=k*sum,所以直接写x就可以了。x%=mod;int y=(int)x;return y;}else return max(max1,max2);}
};
努力加油a啊,(o)/~
1191. K 次串联后最大子数组之和(最大子段和变形)相关推荐
- LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 ...
- leetcode - 1191. K 次串联后最大子数组之和
给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2 ...
- leetcode算法题--K 次串联后最大子数组之和★
原题链接:https://leetcode-cn.com/problems/k-concatenation-maximum-sum/ 如图(来源) 记k==1,数组和为sum 分情况讨论: 当k == ...
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2
本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以 引用 一维最大子数组之和 的思想 一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组 ...
- 环形数组求最大子数组之和
环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一 ...
- 环形数组最大子数组之和
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j-1]首尾相邻, ...
- 求首位相连一维数组最大子数组的和
结对成员: 朱少辉:主要负责代码编写 侯涛亮:主要负责程序测试 题目:一个首尾相接的一维整型数组,其中有正有负,求它的最大子数组并返回它的位置. 思路:在求一维子数组的基础上,先输入一个含有N个数的一 ...
- 分治法求解最大子数组问题
最大子数组问题求解 将数组A分成两部分,A[left...mid]和A[mid+1..right]两部分,求解最大子数组之和包含了三种可能的情况: 1.完全位于子数组A[left...mid]中,因此 ...
- 返回一个二维整数数组最大子数组的和
要求: 1,输入一个二维整形数组,数组里有正数也有负数. 2,二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和, 3,求所有子数组的和的最大值. 设计思路: 参照一维整数数组求解最大子 ...
最新文章
- 823专业课计算机,辽宁科技大学823计算机专业基础综合(含数据结构、计算机组成原理、操作系统和计算机网络)考研复习经验...
- 在Linux上进行内核参数调整
- narwal无法连接机器人_懒无止境 能自己洗抹布的云鲸J1扫拖机器人
- 新视角来了:《用户体验四维度》
- CDH spark2切换成anaconda3的问题
- hashmap 遍历_HashMap面试必问的数据结构相关知识总结
- 用html5做京东登录框,使用HTML5搭建京东登录界面(二)
- 开源协议及应用 (BSD/GPL/LGPL/Apache/MIT)
- Git 修改历史提交中的用户名和邮箱
- css 实现一个尖角_纯CSS实现页面的尖角、小三角、不同方向尖角的方法小结
- 2021最新MyEclipse安装教程
- NAFSM中值滤波器讲解与实现
- 控制台报错:java.security.InvalidKeyException: Illegal key size
- python版钉钉回调
- 【图文教程】文件压缩和打包
- 机器视觉工程师应该知道的23个工业镜头专业术语
- 【亡羊补牢】JS灵魂之问 第23期 修炼内功 关于闭包的回顾
- 齐博cmsv7.0后台getshell
- 将16进制表示的编码转为中文
- 数据可视化平台Superset(安装篇)
热门文章
- python按列输出字符_如何根据条件在Pandas中构建新列(新列应输出字符串)
- 成都python数据分析师职业技能_想成为数据分析师,需要重点学习什么技能?
- c#使用正则表达式获取TR中的多个TD_PHP正则表达式技术心得与使用技巧完全详解 第3节...
- C#中类与结构体的区别
- 计算机毕业设计制作模仿网站的期末作业通过神器——各种扒站方法(网站,软件)
- python加载html表格数据,使用python 3.6获取html表格行数据美丽的汤
- int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....
- java集合刷新面板_java Swing 中 面板刷新的问题。。求指教 。 高手在哪里啊。。。...
- FreeCAD v0.19源码编译与VS2017+Qt5环境搭建
- UITextField中复制和粘贴为中文