【算法题解】重复数组的最大子数组和问题(kConcatenationMaxSum)
题目描述
给定一个整数数组 arr
和一个整数 k
,通过将数组 arr
重复 k
次来生成一个新的数组。例如:
- 如果
arr = [1, 2]
,k = 3
, - 那么新数组为
[1, 2, 1, 2, 1, 2]
。
要求:
返回新数组中最大子数组的和。
其中,子数组长度可以为0,空子数组的和定义为0。
由于结果可能非常大,要求返回值对 10^9 + 7 取模。
解题分析
此题的核心是利用数组重复带来的结构特性,求最大子数组和。
1. 朴素思路:直接拼接数组,计算最大子数组和
最直观的做法是将数组重复 k
次,得到长度为 n * k
的大数组,再用经典的 Kadane 算法求最大子数组和。
- 复杂度高,特别当
k
很大时(可能高达 10^5),此方法不可行。
2. 优化思路
观察问题可发现:
- 最大子数组和问题(Kadane算法):
计算一个数组的最大子数组和的经典方法,时间复杂度 O(n)。