https://leetcode-cn.com/problems/container-with-most-water/
1.穷举法
用双循环遍历每一个元素
class Solution {
public int maxArea(int [] a){
int max = 0 ;
for ( int i = 0 ; i < a.length - 1 ; ++i ) {
for ( int j = i + 1 ; j < a.length ; ++j ){ //这两句要写熟
int area = ( j - i ) * Math.min ( a[i], a[j] );
max = Math.max ( area, max);
}
}
return max;
}
}
2.从底最大的情况开始考虑,每次只移动较小的边界,因为目的是找更大的面积,(在底边变小的前提下,所以要找更大的高)。
class Solution {
public int maxArea(int [] a){
int max = 0 ;
for ( int i = 0 , int j = a.length ; i < j ) {
int minHeight = a[i] < a[j] ? a[i++] : a[j--];
int area = ( j - i + 1 ) * minHeight ; //这句话本身是不用+1的,但因为在前一个语句中i/j的值 已经发生了变化,要注意。
max = Math.max ( area , max );
}
return max;
}
}