File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed
Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change 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+ };
You can’t perform that action at this time.
0 commit comments