Skip to content

Commit b0aefa8

Browse files
authored
Create 3381. Maximum Subarray Sum With Length Divisible by K
1 parent 1bdb26b commit b0aefa8

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
public:
3+
long long maxSubarraySum(vector<int>& nums, int k) {
4+
vector<int> dp(nums.size(), -1);
5+
6+
vector<long long> prefix(nums.size(), 0);
7+
prefix[0] = nums[0];
8+
for (int i = 1; i < nums.size(); i++) {
9+
prefix[i] = prefix[i - 1] + nums[i];
10+
}
11+
long long ans = prefix[k - 1];
12+
if ( nums.size() % k ==0 ){
13+
ans = max ( prefix[nums.size() -1] ,prefix[k - 1] );
14+
}
15+
if ( k == 1){
16+
ans = *max_element(prefix.begin(), prefix.end());
17+
}
18+
19+
for (int i = k; i < nums.size(); i++) {
20+
if ((i + 1) % k == 0) {
21+
ans = max(ans, prefix[i]);
22+
}
23+
int r = i % k;
24+
if (dp[r] == -1) {
25+
dp[r] = r;
26+
long long sum =
27+
prefix[i] - prefix[r];
28+
ans = max(ans, sum);
29+
} else {
30+
long long sum = prefix[i] - prefix[dp[r]];
31+
ans = max(ans, sum);
32+
}
33+
if (prefix[i] < prefix[dp[r]]) {
34+
dp[r] = i;
35+
}
36+
}
37+
38+
return ans;
39+
}
40+
};

0 commit comments

Comments
 (0)