mirror of
https://github.com/lWolvesl/leetcode.git
synced 2026-01-12 18:08:38 +08:00
Add solution for LeetCode 3381: Maximum Subarray Sum with Length Multiple of K
This commit is contained in:
38
25/11/3381.cpp
Normal file
38
25/11/3381.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <climits>
|
||||
#include <vector>
|
||||
|
||||
class Solution {
|
||||
public:
|
||||
long long maxSubarraySum(std::vector<int>& nums, int k) {
|
||||
int n = nums.size();
|
||||
std::vector<long long> sum(n+1);
|
||||
sum[0] = 0;
|
||||
for(int i = 0;i<n;i++){
|
||||
sum[i+1] = sum[i] + nums[i];
|
||||
}
|
||||
|
||||
std::vector<long long> mins(k,LLONG_MAX/2);
|
||||
long long ans = LLONG_MIN;
|
||||
for(int j = 0;j < n + 1;j++){
|
||||
int i = j%k;
|
||||
ans = std::max(ans,sum[j]-mins[i]);
|
||||
mins[i] = std::min(mins[i],sum[j]);
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
long long maxSubarraySumByDP(std::vector<int>& nums, int k) {
|
||||
int n = nums.size();
|
||||
std::vector<long long> sum(n + 1);
|
||||
for (int i = 0; i < n; ++i) {
|
||||
sum[i + 1] = sum[i] + nums[i];
|
||||
}
|
||||
std::vector<long long> dp(n + 1,-1);
|
||||
long long ans = -1e18;
|
||||
for (int i = k; i <= n; ++i) {
|
||||
dp[i] = std::max(dp[i - k], (long long)0) + sum[i] - sum[i - k];
|
||||
ans = std::max(ans, dp[i]);
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user