|
53 | 53 |
|
54 | 54 | <!-- solution:start -->
|
55 | 55 |
|
56 |
| -### Solution 1 |
| 56 | +### Solution 1: Monotonic stack |
57 | 57 |
|
58 | 58 | <!-- tabs:start -->
|
59 | 59 |
|
@@ -150,6 +150,96 @@ func maxWidthRamp(nums []int) int {
|
150 | 150 | }
|
151 | 151 | ```
|
152 | 152 |
|
| 153 | +#### TypeScript |
| 154 | + |
| 155 | +```ts |
| 156 | +function maxWidthRamp(nums: number[]): number { |
| 157 | + let [ans, n] = [0, nums.length]; |
| 158 | + const stk: number[] = []; |
| 159 | + |
| 160 | + for (let i = 0; i < n - 1; i++) { |
| 161 | + if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) { |
| 162 | + stk.push(i); |
| 163 | + } |
| 164 | + } |
| 165 | + |
| 166 | + for (let i = n - 1; i >= 0; i--) { |
| 167 | + while (stk.length && nums[stk.at(-1)!] <= nums[i]) { |
| 168 | + ans = Math.max(ans, i - stk.pop()!); |
| 169 | + } |
| 170 | + if (stk.length === 0) break; |
| 171 | + } |
| 172 | + |
| 173 | + return ans; |
| 174 | +} |
| 175 | +``` |
| 176 | + |
| 177 | +#### JavaScript |
| 178 | + |
| 179 | +```js |
| 180 | +function maxWidthRamp(nums) { |
| 181 | + let [ans, n] = [0, nums.length]; |
| 182 | + const stk = []; |
| 183 | + |
| 184 | + for (let i = 0; i < n - 1; i++) { |
| 185 | + if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) { |
| 186 | + stk.push(i); |
| 187 | + } |
| 188 | + } |
| 189 | + |
| 190 | + for (let i = n - 1; i >= 0; i--) { |
| 191 | + while (stk.length && nums[stk.at(-1)] <= nums[i]) { |
| 192 | + ans = Math.max(ans, i - stk.pop()); |
| 193 | + } |
| 194 | + if (stk.length === 0) break; |
| 195 | + } |
| 196 | + |
| 197 | + return ans; |
| 198 | +} |
| 199 | +``` |
| 200 | + |
| 201 | +<!-- tabs:end --> |
| 202 | + |
| 203 | +<!-- solution:end --> |
| 204 | + |
| 205 | +<!-- solution:start --> |
| 206 | + |
| 207 | +### Solution 2: Sorting |
| 208 | + |
| 209 | +<!-- tabs:start --> |
| 210 | + |
| 211 | +#### TypeScript |
| 212 | + |
| 213 | +```ts |
| 214 | +function maxWidthRamp(nums: number[]): number { |
| 215 | + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); |
| 216 | + let [ans, j] = [0, nums.length]; |
| 217 | + |
| 218 | + for (const [_, i] of idx) { |
| 219 | + ans = Math.max(ans, i - j); |
| 220 | + j = Math.min(j, i); |
| 221 | + } |
| 222 | + |
| 223 | + return ans; |
| 224 | +} |
| 225 | +``` |
| 226 | + |
| 227 | +#### JavaScript |
| 228 | + |
| 229 | +```js |
| 230 | +function maxWidthRamp(nums) { |
| 231 | + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); |
| 232 | + let [ans, j] = [0, nums.length]; |
| 233 | + |
| 234 | + for (const [_, i] of idx) { |
| 235 | + ans = Math.max(ans, i - j); |
| 236 | + j = Math.min(j, i); |
| 237 | + } |
| 238 | + |
| 239 | + return ans; |
| 240 | +} |
| 241 | +``` |
| 242 | + |
153 | 243 | <!-- tabs:end -->
|
154 | 244 |
|
155 | 245 | <!-- solution:end -->
|
|
0 commit comments