Medium
Maximum Good Subarray Sum — C++
Full explanation · Time O(n) · Space O(n)
// Time: O(n)
// Space: O(n)
// prefix sum
class Solution {
public:
long long maximumSubarraySum(vector<int>& nums, int k) {
const auto NEG_INF = numeric_limits<int64_t>::min();
const auto POS_INF = numeric_limits<int64_t>::max();
unordered_map<int, int64_t> prefix;
int64_t result = NEG_INF, curr = 0;
for (const auto& x : nums) {
prefix[x] = min(prefix.count(x) ? prefix[x] : POS_INF, curr);
curr += x;
if (prefix.count(x - k)) {
result = max(result, curr - prefix[x - k]);
}
if (prefix.count(x + k)) {
result = max(result, curr - prefix[x + k]);
}
}
return result != NEG_INF ? result : 0;
}
};