Skip to content

Commit 1fb8710

Browse files
committed
✨ feat: 盛最多水的容器
1 parent 22c0523 commit 1fb8710

File tree

6 files changed

+108
-0
lines changed

6 files changed

+108
-0
lines changed

DataStructure/Array/MaxArea.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"use strict";
2+
exports.__esModule = true;
3+
/**
4+
* 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
5+
* 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。
6+
* 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
7+
* @param {number[]} height
8+
* @return {number}
9+
*/
10+
var maxArea = function (height) {
11+
var result = 0;
12+
var left = 0;
13+
var right = height.length - 1;
14+
// 循环计算容器的存水多少
15+
while (left < right) {
16+
// 存水的高度是由较短一侧的高度确定的
17+
var side = Math.min(height[left], height[right]);
18+
var len = right - left;
19+
// 计算容积
20+
var volume = side * len;
21+
result = volume > result ? volume : result;
22+
// 变化较小侧来寻找最大的容积
23+
if (height[left] < height[right]) {
24+
left++;
25+
}
26+
else {
27+
right--;
28+
}
29+
}
30+
return result;
31+
};
32+
exports.maxArea = maxArea;

DataStructure/Array/MaxArea.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
3+
* 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。
4+
* 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
5+
* @param {number[]} height
6+
* @return {number}
7+
*/
8+
var maxArea = function(height: number[]): number {
9+
let result = 0;
10+
let left = 0;
11+
let right = height.length - 1;
12+
// 循环计算容器的存水多少
13+
while(left < right) {
14+
// 存水的高度是由较短一侧的高度确定的
15+
let side = Math.min(height[left], height[right]);
16+
let len = right - left;
17+
// 计算容积
18+
let volume = side * len;
19+
result = volume > result ? volume : result;
20+
// 变化较小侧来寻找最大的容积
21+
if (height[left] < height[right]) {
22+
left++;
23+
} else {
24+
right--;
25+
}
26+
}
27+
return result;
28+
};
29+
30+
export {maxArea}

DataStructure/Test/Array.test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {trap} from '../Array/Trap'
1818
import {findMedianSortedArrays} from '../Array/FindMedianSortedArrays'
1919
import {threeSumClosest} from '../Array/ThreeSumCloest'
2020
import {removeDuplicates} from '../Array/RemoveDuplicates'
21+
import {maxArea} from '../Array/MaxArea'
2122

2223
test('FindNumWithSum', () => {
2324
expect(FindNumWithSum([1,2,3,4,5,6,7,8], 11)).toEqual([3,8])
@@ -118,4 +119,8 @@ test('threeSumCloest', () => {
118119

119120
test('removeDuplicates', () => {
120121
expect(removeDuplicates([1,2,2,3,3,3,4,4,5,6,6,7])).toBe(7)
122+
})
123+
124+
test('MaxArea', () => {
125+
expect(maxArea([1,8,6,2,5,4,8,3,7])).toBe(49)
121126
})

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ Questions Solutions on LeetCode
7373
- 寻找两个有序数组的中位数 | LeetCode[4]
7474
- 最接近的三数之和 | LeetCode [16]
7575
- 删除排序数组中的重复项 | LeetCode [26]
76+
- 盛最多水的容器 | LeetCode [11]
7677

7778

7879
### [字符串](./ds/String.md)

docs/ds/Array.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,45 @@ var removeDuplicates = function(nums) {
239239
};
240240
```
241241

242+
### 盛最多水的容器
243+
244+
> 此部分代码在 MaxArea.ts 中
245+
246+
给定 *n* 个非负整数 *a*1,*a*2,...,*a*n,每个数代表坐标中的一个点 (*i*, *ai*) 。在坐标内画 *n* 条垂直线,垂直线 *i* 的两个端点分别为 (*i*, *ai*) 和 (*i*, 0)。找出其中的两条线,使得它们与 *x* 轴共同构成的容器可以容纳最多的水。
247+
248+
```typescript
249+
/**
250+
* 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
251+
* 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。
252+
* 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
253+
* @param {number[]} height
254+
* @return {number}
255+
*/
256+
var maxArea = function(height: number[]): number {
257+
let result = 0;
258+
let left = 0;
259+
let right = height.length - 1;
260+
// 循环计算容器的存水多少
261+
while(left < right) {
262+
// 存水的高度是由较短一侧的高度确定的
263+
let side = Math.min(height[left], height[right]);
264+
let len = right - left;
265+
// 计算容积
266+
let volume = side * len;
267+
result = volume > result ? volume : result;
268+
// 变化较小侧来寻找最大的容积
269+
if (height[left] < height[right]) {
270+
left++;
271+
} else {
272+
right--;
273+
}
274+
}
275+
return result;
276+
};
277+
278+
export {maxArea}
279+
```
280+
242281

243282

244283

docs/ds/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ sidebar: auto
6868
- 寻找两个有序数组的中位数 | LeetCode[4]
6969
- 最接近的三数之和 | LeetCode [16]
7070
- 删除排序数组中的重复项 | LeetCode [26]
71+
- 盛最多水的容器 | LeetCode [11]
7172

7273
## [字符串](./String.md)
7374
- 最长公共前缀 | LeetCode [14]

0 commit comments

Comments
 (0)