|
55 | 55 | <!-- tabs:start -->
|
56 | 56 |
|
57 | 57 | ```python
|
58 |
| - |
| 58 | +class Solution: |
| 59 | + def maximumSubarraySum(self, nums: List[int], k: int) -> int: |
| 60 | + p = {} |
| 61 | + r = float('-inf') |
| 62 | + p[nums[0]] = 0 |
| 63 | + s = 0 |
| 64 | + n = len(nums) |
| 65 | + for i in range(n): |
| 66 | + s += nums[i] |
| 67 | + if nums[i] - k in p: |
| 68 | + r = max(r, s - p[nums[i] - k]) |
| 69 | + if nums[i] + k in p: |
| 70 | + r = max(r, s - p[nums[i] + k]) |
| 71 | + if i + 1 == n: |
| 72 | + break |
| 73 | + if nums[i + 1] not in p or p[nums[i + 1]] > s: |
| 74 | + p[nums[i + 1]] = s |
| 75 | + return r if r != float('-inf') else 0 |
59 | 76 | ```
|
60 | 77 |
|
61 | 78 | ```java
|
62 |
| - |
| 79 | +class Solution { |
| 80 | + public long maximumSubarraySum(int[] nums, int k) { |
| 81 | + HashMap<Integer, Long> p = new HashMap<>(); |
| 82 | + long r = Long.MIN_VALUE; |
| 83 | + p.put(nums[0], 0L); |
| 84 | + long s = 0; |
| 85 | + int n = nums.length; |
| 86 | + for (int i = 0;; ++i) { |
| 87 | + s += nums[i]; |
| 88 | + if (p.containsKey(nums[i] - k)) { |
| 89 | + r = Math.max(r, s - p.get(nums[i] - k)); |
| 90 | + } |
| 91 | + if (p.containsKey(nums[i] + k)) { |
| 92 | + r = Math.max(r, s - p.get(nums[i] + k)); |
| 93 | + } |
| 94 | + if (i + 1 == n) break; |
| 95 | + if (!p.containsKey(nums[i + 1]) || p.get(nums[i + 1]) > s) { |
| 96 | + p.put(nums[i + 1], s); |
| 97 | + } |
| 98 | + } |
| 99 | + return r == Long.MIN_VALUE ? 0 : r; |
| 100 | + } |
| 101 | +} |
63 | 102 | ```
|
64 | 103 |
|
65 | 104 | ```cpp
|
66 |
| - |
| 105 | +class Solution { |
| 106 | +public: |
| 107 | + long long maximumSubarraySum(vector<int>& nums, int k) { |
| 108 | + unordered_map<int, long long> p; |
| 109 | + long long r = LONG_LONG_MIN; |
| 110 | + p[nums[0]] = 0; |
| 111 | + long long s = 0; |
| 112 | + const int n = nums.size(); |
| 113 | + for (int i = 0;; ++i) { |
| 114 | + s += nums[i]; |
| 115 | + auto t = p.find(nums[i] - k); |
| 116 | + if (t != p.end()) { |
| 117 | + r = max(r, s - t->second); |
| 118 | + } |
| 119 | + t = p.find(nums[i] + k); |
| 120 | + if (t != p.end()) { |
| 121 | + r = max(r, s - t->second); |
| 122 | + } |
| 123 | + if (i + 1 == n) |
| 124 | + break; |
| 125 | + t = p.find(nums[i + 1]); |
| 126 | + if (t == p.end() || t->second > s) { |
| 127 | + p[nums[i + 1]] = s; |
| 128 | + } |
| 129 | + } |
| 130 | + return r == LONG_LONG_MIN ? 0 : r; |
| 131 | + } |
| 132 | +}; |
67 | 133 | ```
|
68 | 134 |
|
69 | 135 | ```go
|
| 136 | +func maximumSubarraySum(nums []int, k int) int64 { |
| 137 | + p := make(map[int]int64) |
| 138 | + var r int64 = math.MinInt64 |
| 139 | + p[nums[0]] = 0 |
| 140 | + var s int64 = 0 |
| 141 | + n := len(nums) |
| 142 | + for i := 0; ; i++ { |
| 143 | + s += int64(nums[i]) |
| 144 | + if t, ok := p[nums[i]-k]; ok { |
| 145 | + r = max(r, s-t) |
| 146 | + } |
| 147 | + if t, ok := p[nums[i]+k]; ok { |
| 148 | + r = max(r, s-t) |
| 149 | + } |
| 150 | + if i+1 == n { |
| 151 | + break |
| 152 | + } |
| 153 | + if t, ok := p[nums[i+1]]; !ok || t > s { |
| 154 | + p[nums[i+1]] = s |
| 155 | + } |
| 156 | + } |
| 157 | + if r == math.MinInt64 { |
| 158 | + return 0 |
| 159 | + } |
| 160 | + return r |
| 161 | +} |
| 162 | +``` |
70 | 163 |
|
| 164 | +```ts |
| 165 | +function maximumSubarraySum(nums: number[], k: number): number { |
| 166 | + const p: Map<number, number> = new Map(); |
| 167 | + let r: number = Number.MIN_SAFE_INTEGER; |
| 168 | + p.set(nums[0], 0); |
| 169 | + let s: number = 0; |
| 170 | + const n: number = nums.length; |
| 171 | + for (let i = 0; ; ++i) { |
| 172 | + s += nums[i]; |
| 173 | + let t: number | undefined = p.get(nums[i] - k); |
| 174 | + if (t !== undefined) { |
| 175 | + r = Math.max(r, s - t); |
| 176 | + } |
| 177 | + t = p.get(nums[i] + k); |
| 178 | + if (t !== undefined) { |
| 179 | + r = Math.max(r, s - t); |
| 180 | + } |
| 181 | + if (i + 1 === n) break; |
| 182 | + t = p.get(nums[i + 1]); |
| 183 | + if (t === undefined || t > s) { |
| 184 | + p.set(nums[i + 1], s); |
| 185 | + } |
| 186 | + } |
| 187 | + return r === Number.MIN_SAFE_INTEGER ? 0 : r; |
| 188 | +} |
71 | 189 | ```
|
72 | 190 |
|
73 | 191 | <!-- tabs:end -->
|
|
0 commit comments