day4
- 盛水最多的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
本题的做法十分巧妙,从最两侧的开始寻找最大值,然后向中间靠拢,每次都更新最大值,直到相遇 其中如果两侧的值相等,则向中间靠拢,因为如果向中间靠拢,则可以利用左侧的值,而右侧的值已经用不 如果两侧的较低的那个,我们就可以进行选择不要,向中间靠拢1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30class Solution {
public int maxArea(int[] height) {
int pre = 0;
int back = height.length-1;
int ans[] = new int[height.length];
int i = 0;
int min=0;
while(true){
min = height[pre]<height[back]?height[pre]:height[back];
ans[i] = min*(back-pre);
i++;
if(height[pre]<height[back])
pre++;
else
back--;
if(i==height.length)
break;
}
// 初始化最大值为数组的第一个元素
int max = ans[0];
// 遍历数组,找到最大值
for (int k = 1; k < ans.length; k++) {
if (ans[k] > max) {
max = ans[k];
}
}
return max;
}
}
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
WalineFacebook Comments