diff --git a/solution/0900-0999/0962.Maximum Width Ramp/README.md b/solution/0900-0999/0962.Maximum Width Ramp/README.md index 88d4735aede8d..2401ba1c2e83b 100644 --- a/solution/0900-0999/0962.Maximum Width Ramp/README.md +++ b/solution/0900-0999/0962.Maximum Width Ramp/README.md @@ -162,6 +162,96 @@ func maxWidthRamp(nums []int) int { } ``` +#### TypeScript + +```ts +function maxWidthRamp(nums: number[]): number { + let [ans, n] = [0, nums.length]; + const stk: number[] = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)!] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()!); + } + if (stk.length === 0) break; + } + + return ans; +} +``` + +#### JavaScript + +```js +function maxWidthRamp(nums) { + let [ans, n] = [0, nums.length]; + const stk = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()); + } + if (stk.length === 0) break; + } + + return ans; +} +``` + + + + + + + +### 方法二:排序 + + + +#### TypeScript + +```ts +function maxWidthRamp(nums: number[]): number { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +} +``` + +#### JavaScript + +```js +function maxWidthRamp(nums) { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +} +``` + diff --git a/solution/0900-0999/0962.Maximum Width Ramp/README_EN.md b/solution/0900-0999/0962.Maximum Width Ramp/README_EN.md index 58da0809f55fe..5f3f6a6395ed8 100644 --- a/solution/0900-0999/0962.Maximum Width Ramp/README_EN.md +++ b/solution/0900-0999/0962.Maximum Width Ramp/README_EN.md @@ -53,7 +53,7 @@ tags: -### Solution 1 +### Solution 1: Monotonic stack @@ -150,6 +150,96 @@ func maxWidthRamp(nums []int) int { } ``` +#### TypeScript + +```ts +function maxWidthRamp(nums: number[]): number { + let [ans, n] = [0, nums.length]; + const stk: number[] = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)!] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()!); + } + if (stk.length === 0) break; + } + + return ans; +} +``` + +#### JavaScript + +```js +function maxWidthRamp(nums) { + let [ans, n] = [0, nums.length]; + const stk = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()); + } + if (stk.length === 0) break; + } + + return ans; +} +``` + + + + + + + +### Solution 2: Sorting + + + +#### TypeScript + +```ts +function maxWidthRamp(nums: number[]): number { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +} +``` + +#### JavaScript + +```js +function maxWidthRamp(nums) { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +} +``` + diff --git a/solution/0900-0999/0962.Maximum Width Ramp/Solution.js b/solution/0900-0999/0962.Maximum Width Ramp/Solution.js new file mode 100644 index 0000000000000..a9fa8afd3867d --- /dev/null +++ b/solution/0900-0999/0962.Maximum Width Ramp/Solution.js @@ -0,0 +1,19 @@ +function maxWidthRamp(nums) { + let [ans, n] = [0, nums.length]; + const stk = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()); + } + if (stk.length === 0) break; + } + + return ans; +} diff --git a/solution/0900-0999/0962.Maximum Width Ramp/Solution.ts b/solution/0900-0999/0962.Maximum Width Ramp/Solution.ts new file mode 100644 index 0000000000000..c27a741d4de18 --- /dev/null +++ b/solution/0900-0999/0962.Maximum Width Ramp/Solution.ts @@ -0,0 +1,19 @@ +function maxWidthRamp(nums: number[]): number { + let [ans, n] = [0, nums.length]; + const stk: number[] = []; + + for (let i = 0; i < n - 1; i++) { + if (stk.length === 0 || nums[stk.at(-1)!] > nums[i]) { + stk.push(i); + } + } + + for (let i = n - 1; i >= 0; i--) { + while (stk.length && nums[stk.at(-1)!] <= nums[i]) { + ans = Math.max(ans, i - stk.pop()!); + } + if (stk.length === 0) break; + } + + return ans; +} diff --git a/solution/0900-0999/0962.Maximum Width Ramp/Solution2.js b/solution/0900-0999/0962.Maximum Width Ramp/Solution2.js new file mode 100644 index 0000000000000..dfb3998e8f9a6 --- /dev/null +++ b/solution/0900-0999/0962.Maximum Width Ramp/Solution2.js @@ -0,0 +1,11 @@ +function maxWidthRamp(nums) { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +} diff --git a/solution/0900-0999/0962.Maximum Width Ramp/Solution2.ts b/solution/0900-0999/0962.Maximum Width Ramp/Solution2.ts new file mode 100644 index 0000000000000..ee30f48ad0ac5 --- /dev/null +++ b/solution/0900-0999/0962.Maximum Width Ramp/Solution2.ts @@ -0,0 +1,11 @@ +function maxWidthRamp(nums: number[]): number { + const idx = nums.map((x, i) => [x, i]).sort(([a], [b]) => a - b); + let [ans, j] = [0, nums.length]; + + for (const [_, i] of idx) { + ans = Math.max(ans, i - j); + j = Math.min(j, i); + } + + return ans; +}