欢迎光临
我们一直在努力

LeetCode //C - 1191. K-Concatenation Maximum Sum

1191. K-Concatenation Maximum Sum

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

10^9 + 7

109+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

    <

    =

    a

    r

    r

    .

    l

    e

    n

    g

    t

    h

    <

    =

    10

    5

    1 <= arr.length <= 10^5

    1<=arr.length<=105

  • 1

    <

    =

    k

    <

    =

    10

    5

    1 <= k <= 10^5

    1<=k<=105

  • 10

    4

    <

    =

    a

    r

    r

    [

    i

    ]

    <

    =

    10

    4

    -10^4 <= arr[i] <= 10^4

    104<=arr[i]<=104

From: LeetCode Link: 1191. K-Concatenation Maximum Sum


Solution:

Ideas:

Check the best subarray in 1 copy or 2 copies. If total array sum is positive, the middle copies add extra profit.

Code:

#define MOD 1000000007

long long kadane(int* arr, int arrSize, int times) {
long long best = 0;
long long cur = 0;

for (int t = 0; t < times; t++) {
for (int i = 0; i < arrSize; i++) {
cur += arr[i];
if (cur < 0) cur = 0;
if (cur > best) best = cur;
}
}

return best;
}

int kConcatenationMaxSum(int* arr, int arrSize, int k) {
long long sum = 0;

for (int i = 0; i < arrSize; i++) {
sum += arr[i];
}

if (k == 1) {
return kadane(arr, arrSize, 1) % MOD;
}

long long ans = kadane(arr, arrSize, 2);

if (sum > 0) {
ans += (long long)(k 2) * sum;
}

return ans % MOD;
}

赞(0)
未经允许不得转载:171主机测评 » LeetCode //C - 1191. K-Concatenation Maximum Sum
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址