Given an integer array arr
and an integer k
, modify the array by repeating it k
times.
For example, if arr = [1, 2]
and k = 3
then the modified array will be [1, 2, 1, 2, 1, 2]
.
Return the maximum sub-array sum in the modified array. Note that the length of the sub-array can be 0
and its sum in that case is 0
.
As the answer can be very large, return the answer modulo 10^9 + 7
.
Example 1:
Input: arr = [1,2], k = 3 Output: 9
Example 2:
Input: arr = [1,-2,1], k = 5 Output: 2
Example 3:
Input: arr = [-1,-2], k = 7 Output: 0
Constraints:
1 <= arr.length <= 10^5
1 <= k <= 10^5
-10^4 <= arr[i] <= 10^4
思路:结果来源无非3种
1. subarray来源于arr_part
2. subarray来源于arr_part + arr_part
3. subarray来源于arr_part + arr * (k-2) + arr_part
class Solution(object):
def kConcatenationMaxSum(self, arr, k):
"""
:type arr: List[int]
:type k: int
:rtype: int
"""
mod = int(1e9+7)
if max(arr)<=0: return 0
def get_max_sub(a):
mi,su = 0,0
ma = 0
for i in a:
su+=i
ma = max(ma, su-mi)
mi = min(mi, su)
return ma
ma1 = get_max_sub(arr)
ma2 = get_max_sub(arr+arr)
su = sum(arr)
if k==1: return ma1%mod
return max([ma1, ma2, ma2+(k-2)*su])%mod
s=Solution()
print(s.kConcatenationMaxSum(arr = [1,2], k = 3))
print(s.kConcatenationMaxSum(arr = [1,-2,1], k = 5))
print(s.kConcatenationMaxSum(arr = [-1,-2], k = 7))