From affa209d93fc21252959f5a53ab50ab49e96b7b9 Mon Sep 17 00:00:00 2001 From: wolves Date: Thu, 27 Nov 2025 17:06:56 +0800 Subject: [PATCH] Add solution for LeetCode 3381: Maximum Subarray Sum with Length Multiple of K --- 25/11/3381.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 25/11/3381.cpp diff --git a/25/11/3381.cpp b/25/11/3381.cpp new file mode 100644 index 0000000..d8b45a7 --- /dev/null +++ b/25/11/3381.cpp @@ -0,0 +1,38 @@ +#include +#include + +class Solution { +public: + long long maxSubarraySum(std::vector& nums, int k) { + int n = nums.size(); + std::vector sum(n+1); + sum[0] = 0; + for(int i = 0;i 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& nums, int k) { + int n = nums.size(); + std::vector sum(n + 1); + for (int i = 0; i < n; ++i) { + sum[i + 1] = sum[i] + nums[i]; + } + std::vector 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; + } +}; \ No newline at end of file