1
0

3381.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <climits>
  2. #include <vector>
  3. class Solution {
  4. public:
  5. long long maxSubarraySum(std::vector<int>& nums, int k) {
  6. int n = nums.size();
  7. std::vector<long long> sum(n+1);
  8. sum[0] = 0;
  9. for(int i = 0;i<n;i++){
  10. sum[i+1] = sum[i] + nums[i];
  11. }
  12. std::vector<long long> mins(k,LLONG_MAX/2);
  13. long long ans = LLONG_MIN;
  14. for(int j = 0;j < n + 1;j++){
  15. int i = j%k;
  16. ans = std::max(ans,sum[j]-mins[i]);
  17. mins[i] = std::min(mins[i],sum[j]);
  18. }
  19. return ans;
  20. }
  21. long long maxSubarraySumByDP(std::vector<int>& nums, int k) {
  22. int n = nums.size();
  23. std::vector<long long> sum(n + 1);
  24. for (int i = 0; i < n; ++i) {
  25. sum[i + 1] = sum[i] + nums[i];
  26. }
  27. std::vector<long long> dp(n + 1,-1);
  28. long long ans = -1e18;
  29. for (int i = k; i <= n; ++i) {
  30. dp[i] = std::max(dp[i - k], (long long)0) + sum[i] - sum[i - k];
  31. ans = std::max(ans, dp[i]);
  32. }
  33. return ans;
  34. }
  35. };
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。