盛最多水的容器

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;

        }

}   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容