文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数数组 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/k-concatenation-maximum-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

分三种情况

  • k=1, k = 2, k > 2
class Solution {public:int kConcatenationMaxSum(vector<int>& arr, int k) {typedef long long ll;vector<ll> presum(arr.size()*2);ll ans = max(0, arr[0]), mod = 1e9+7, sum=0;ll MIN = min(0, arr[0]), n = arr.size();presum[0] = arr[0];for(int i = 1; i < n*2; ++i){presum[i] = presum[i-1] + arr[i%n];//前缀和ans = max(ans, (ll) (presum[i]-MIN));//前缀和减去前面的最小的前缀和, 最大子数组和MIN = min(MIN, (ll) presum[i]);if(k==1 && i == n-1)return ans;// k=1,直接返回答案if(i==n-1)sum = presum[n-1];//记录单个完整数组的和}if(sum > 0)//和能带来收益return (ans+(k-2)*sum%mod)%mod;return ans;}
};

96 ms 44.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

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

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

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

  2. 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. LeetCode 6039. K 次增加后的最大乘积(优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个非负整数数组 nums 和一个整数 k .每次操作,你可以选择 nums 中 任一 元素并将它 增加 1 . 请你返回 至多 k 次操作后,能得到 ...

  7. LeetCode 2202. K 次操作后最大化顶端元素

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums ,它表示一个 栈 ,其中 nums[0] 是栈顶的元素. 每一次操作中,你可以执行以下操作 之一 : 如果栈 ...

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

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

  9. LeetCode Merge k Sorted Lists(有序单链表数组的合并)

    题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution {private ListNod ...

最新文章

  1. 智能车竞赛技术报告 | 智能车视觉 - 中国矿业大学 - 会飞的车
  2. 2020腾讯校招后台开发
  3. Python——文件操作详解
  4. 076_html5事件属性
  5. python thread start_Python中Thread类的start和run方法的区别
  6. Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
  7. LDAP统一认证服务解决方案
  8. 阿里云如何选择带宽计费模式和带宽值
  9. 计算机硬盘有坏道,电脑硬盘有坏道怎么办?
  10. Electron“安装已中止,安装程序未成功地运行完成”
  11. Python生成验证码图片及验证用户提交的验证码是否正确
  12. 服务器开机必须要按f1才能进系统,每次开机都要按F1才能进入系统的解决方法...
  13. Android/安卓 文本添加中划线、下划线的方法
  14. 阿里巴巴客户体验事业群智能客服调度最佳实践
  15. web前端开发工程师是做什么工作的?
  16. AD的设计里面找不到生成PCB选项
  17. 2021-08-29 UML笔记
  18. 汽车动力性仿真matlab程序,汽车理论课程设计:基于Matlab的汽车动力性的仿真
  19. 麦肯锡深度解析:量子计算将拯救地球?
  20. 汇丰银行面试--软件测试面试题

热门文章

  1. CSS中的块元素,内联元素,内联块元素
  2. python注释及语句分类
  3. Hive的基本操作总结
  4. python监控网页更新_python监控网页更新
  5. 录制wav格式的音频
  6. 数据结构:栈和列之如何用两个队列实现一个栈?两个栈实现一个队列?
  7. 数据有序_Redis实战(3)-数据结构List实战一之商品信息的有序存储
  8. 吴裕雄--天生自然 物理学习与探索笔记:电功、电路以及欧姆定律
  9. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建
  10. CF Edu54 E. Vasya and a Tree DFS+树状数组