给你一个整数数组 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 次串联后最大子数组之和(最大子段和变形)相关推荐

  1. LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 ...

  2. leetcode - 1191. K 次串联后最大子数组之和

    给你一个整数数组 arr 和一个整数 k. 首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次. 举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2 ...

  3. leetcode算法题--K 次串联后最大子数组之和★

    原题链接:https://leetcode-cn.com/problems/k-concatenation-maximum-sum/ 如图(来源) 记k==1,数组和为sum 分情况讨论: 当k == ...

  4. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了   二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想 一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组 ...

  5. 环形数组求最大子数组之和

    环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一 ...

  6. 环形数组最大子数组之和

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j-1]首尾相邻, ...

  7. 求首位相连一维数组最大子数组的和

    结对成员: 朱少辉:主要负责代码编写 侯涛亮:主要负责程序测试 题目:一个首尾相接的一维整型数组,其中有正有负,求它的最大子数组并返回它的位置. 思路:在求一维子数组的基础上,先输入一个含有N个数的一 ...

  8. 分治法求解最大子数组问题

    最大子数组问题求解 将数组A分成两部分,A[left...mid]和A[mid+1..right]两部分,求解最大子数组之和包含了三种可能的情况: 1.完全位于子数组A[left...mid]中,因此 ...

  9. 返回一个二维整数数组最大子数组的和

     要求: 1,输入一个二维整形数组,数组里有正数也有负数. 2,二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和, 3,求所有子数组的和的最大值. 设计思路: 参照一维整数数组求解最大子 ...

最新文章

  1. 823专业课计算机,辽宁科技大学823计算机专业基础综合(含数据结构、计算机组成原理、操作系统和计算机网络)考研复习经验...
  2. 在Linux上进行内核参数调整
  3. narwal无法连接机器人_懒无止境 能自己洗抹布的云鲸J1扫拖机器人
  4. 新视角来了:《用户体验四维度》
  5. CDH spark2切换成anaconda3的问题
  6. hashmap 遍历_HashMap面试必问的数据结构相关知识总结
  7. 用html5做京东登录框,使用HTML5搭建京东登录界面(二)
  8. 开源协议及应用 (BSD/GPL/LGPL/Apache/MIT)
  9. Git 修改历史提交中的用户名和邮箱
  10. css 实现一个尖角_纯CSS实现页面的尖角、小三角、不同方向尖角的方法小结
  11. 2021最新MyEclipse安装教程
  12. NAFSM中值滤波器讲解与实现
  13. 控制台报错:java.security.InvalidKeyException: Illegal key size
  14. python版钉钉回调
  15. 【图文教程】文件压缩和打包
  16. 机器视觉工程师应该知道的23个工业镜头专业术语
  17. 【亡羊补牢】JS灵魂之问 第23期 修炼内功 关于闭包的回顾
  18. 齐博cmsv7.0后台getshell
  19. 将16进制表示的编码转为中文
  20. 数据可视化平台Superset(安装篇)

热门文章

  1. python按列输出字符_如何根据条件在Pandas中构建新列(新列应输出字符串)
  2. 成都python数据分析师职业技能_想成为数据分析师,需要重点学习什么技能?
  3. c#使用正则表达式获取TR中的多个TD_PHP正则表达式技术心得与使用技巧完全详解 第3节...
  4. C#中类与结构体的区别
  5. 计算机毕业设计制作模仿网站的期末作业通过神器——各种扒站方法(网站,软件)
  6. python加载html表格数据,使用python 3.6获取html表格行数据美丽的汤
  7. int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....
  8. java集合刷新面板_java Swing 中 面板刷新的问题。。求指教 。 高手在哪里啊。。。...
  9. FreeCAD v0.19源码编译与VS2017+Qt5环境搭建
  10. UITextField中复制和粘贴为中文