11_盛最多水的容器

11_盛最多水的容器

 

 

package 数组;
/**
 * https://leetcode-cn.com/problems/container-with-most-water/
 * @author Huangyujun
 * 
 */
public class _11_盛最多水的容器 {
    /**
     * 核心:在比较小的范围里找到那个最大的值
     * 思路:面接的公式~高(取决于左右两侧两个柱子中比较小的那个柱子)
     * 但是咱希望高的数值比较大(则需要:在比较小的范围里找到那个最大的值)
     * @author Huangyujun
     *
     */
    //正解:双指针法
    public class Solution {
        public int maxArea(int[] height) {
            int l = 0, r = height.length - 1;
            int ans = 0;
            while (l < r) {
                //面积公式 高:最小的 【左柱子,右柱子】
                int area = Math.min(height[l], height[r]) * (r - l);
                ans = Math.max(ans, area);
                // 需要找小的:(目的:去获取那个小柱子中的最大值)
                if (height[l] <= height[r]) {
                    ++l;
                }
                else {
                    --r;
                }
            }
            return ans;
        }
    }
}

 

posted @ 2021-12-19 22:04  一乐乐  阅读(27)  评论(0编辑  收藏  举报