Explorar el Código

Add solution for LeetCode 3381: Maximum Subarray Sum with Length Multiple of K

wolves hace 4 meses
padre
commit
affa209d93
Se han modificado 1 ficheros con 38 adiciones y 0 borrados
  1. 38 0
      25/11/3381.cpp

+ 38 - 0
25/11/3381.cpp

@@ -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;
+    }
+};

备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。