Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 90 additions & 0 deletions
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‎

Lines changed: 91 additions & 1 deletion
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 -->
Lines changed: 19 additions & 0 deletions
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+
}
Lines changed: 19 additions & 0 deletions
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+
}
Lines changed: 11 additions & 0 deletions
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+
}
Lines changed: 11 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /