Skip to content

Commit 7c25a05

Browse files
authored
feat: add solutions to lc problem: No.0962 (doocs#3631)
1 parent 99425ce commit 7c25a05

File tree

6 files changed

+241
-1
lines changed

6 files changed

+241
-1
lines changed

solution/0900-0999/0962.Maximum Width Ramp/README.md

+90
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,96 @@ func maxWidthRamp(nums []int) int {
162162
}
163163
```
164164

165+
#### TypeScript
166+
167+
```ts
168+
function maxWidthRamp(nums: number[]): number {
169+
let [ans, n] = [0, nums.length];
170+
const stk: number[] = [];
171+
172+
for (let i = 0; i < n - 1; i++) {
173+
if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) {
174+
stk.push(i);
175+
}
176+
}
177+
178+
for (let i = n - 1; i >= 0; i--) {
179+
while (stk.length && nums[stk.at(-1)!] <= nums[i]) {
180+
ans = Math.max(ans, i - stk.pop()!);
181+
}
182+
if (stk.length === 0) break;
183+
}
184+
185+
return ans;
186+
}
187+
```
188+
189+
#### JavaScript
190+
191+
```js
192+
function maxWidthRamp(nums) {
193+
let [ans, n] = [0, nums.length];
194+
const stk = [];
195+
196+
for (let i = 0; i < n - 1; i++) {
197+
if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) {
198+
stk.push(i);
199+
}
200+
}
201+
202+
for (let i = n - 1; i >= 0; i--) {
203+
while (stk.length && nums[stk.at(-1)] <= nums[i]) {
204+
ans = Math.max(ans, i - stk.pop());
205+
}
206+
if (stk.length === 0) break;
207+
}
208+
209+
return ans;
210+
}
211+
```
212+
213+
<!-- tabs:end -->
214+
215+
<!-- solution:end -->
216+
217+
<!-- solution:start -->
218+
219+
### 方法二:排序
220+
221+
<!-- tabs:start -->
222+
223+
#### TypeScript
224+
225+
```ts
226+
function maxWidthRamp(nums: number[]): number {
227+
const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b);
228+
let [ans, j] = [0, nums.length];
229+
230+
for (const [_, i] of idx) {
231+
ans = Math.max(ans, i - j);
232+
j = Math.min(j, i);
233+
}
234+
235+
return ans;
236+
}
237+
```
238+
239+
#### JavaScript
240+
241+
```js
242+
function maxWidthRamp(nums) {
243+
const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b);
244+
let [ans, j] = [0, nums.length];
245+
246+
for (const [_, i] of idx) {
247+
ans = Math.max(ans, i - j);
248+
j = Math.min(j, i);
249+
}
250+
251+
return ans;
252+
}
253+
```
254+
165255
<!-- tabs:end -->
166256

167257
<!-- solution:end -->

solution/0900-0999/0962.Maximum Width Ramp/README_EN.md

+91-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ tags:
5353

5454
<!-- solution:start -->
5555

56-
### Solution 1
56+
### Solution 1: Monotonic stack
5757

5858
<!-- tabs:start -->
5959

@@ -150,6 +150,96 @@ func maxWidthRamp(nums []int) int {
150150
}
151151
```
152152

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+
153243
<!-- tabs:end -->
154244

155245
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function maxWidthRamp(nums) {
2+
let [ans, n] = [0, nums.length];
3+
const stk = [];
4+
5+
for (let i = 0; i < n - 1; i++) {
6+
if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) {
7+
stk.push(i);
8+
}
9+
}
10+
11+
for (let i = n - 1; i >= 0; i--) {
12+
while (stk.length && nums[stk.at(-1)] <= nums[i]) {
13+
ans = Math.max(ans, i - stk.pop());
14+
}
15+
if (stk.length === 0) break;
16+
}
17+
18+
return ans;
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function maxWidthRamp(nums: number[]): number {
2+
let [ans, n] = [0, nums.length];
3+
const stk: number[] = [];
4+
5+
for (let i = 0; i < n - 1; i++) {
6+
if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) {
7+
stk.push(i);
8+
}
9+
}
10+
11+
for (let i = n - 1; i >= 0; i--) {
12+
while (stk.length && nums[stk.at(-1)!] <= nums[i]) {
13+
ans = Math.max(ans, i - stk.pop()!);
14+
}
15+
if (stk.length === 0) break;
16+
}
17+
18+
return ans;
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function maxWidthRamp(nums) {
2+
const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b);
3+
let [ans, j] = [0, nums.length];
4+
5+
for (const [_, i] of idx) {
6+
ans = Math.max(ans, i - j);
7+
j = Math.min(j, i);
8+
}
9+
10+
return ans;
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function maxWidthRamp(nums: number[]): number {
2+
const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b);
3+
let [ans, j] = [0, nums.length];
4+
5+
for (const [_, i] of idx) {
6+
ans = Math.max(ans, i - j);
7+
j = Math.min(j, i);
8+
}
9+
10+
return ans;
11+
}

0 commit comments

Comments
 (0)