leetcode11. 盛最多水的容器

一:题目

leetcode11. 盛最多水的容器_第1张图片

二:上码

// class Solution {
//     public int maxArea(int[] height) {
//         int len = height.length;
//         int ans = 0;

//         for (int i = 0; i < len; i++) {
//             for (int j = len - 1; j >= i; j--) {
                
//                 int x = j - i;
//                 int y = Math.min(height[i],height[j]);
//                 ans = Math.max(ans,x*y);
//             }
//         }

//         return ans;
//     }
// }

/**
    思路:
    1. S(面积) = min(h[i],h[j]) * (j-i) (每次都是短板*(j-i))
    2.双指针那么我们如何移动指针呢 
        1>:如果移动短板  那么 我们的面积可能增大  因为可能会遇见更长的班
        2>:如果移动长板  那么 我们的面积不变或者变小 因为可能遇见长板 但最短的板不变  面积不变
            可能遇见短板 那么面积更小
        3>:所以的话 我们每次移动短板
    */      

class Solution {
    public int maxArea(int[] height) {
       int len = height.length;
       int ans = 0;
       int i = 0;
       int j = len - 1; 

       while (i < j) {
           ans = Math.max(ans,Math.min(height[i],height[j])*(j-i));
           if (height[i] > height[j]) j--;
           else i++;
       }

        return ans;
    }
}

leetcode11. 盛最多水的容器_第2张图片

你可能感兴趣的:(java刷lc,leetcode,算法,数据结构)