题解 | 双指针 #盛水最多的容器# [P0 - T2]

盛水最多的容器

http://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47

双指针
1. 计算当前左右指针所夹面积
2. 如果lH <= rH, 
   移动左指针,直到指针所指的高度比之前lH高 (宽变短了, 所以高必须变高才可能面积更大)
3. 如果lH > rH同理。
   移动右指针,直到指针所指的高度比之前rH高

import java.util.*;

public class Solution {
  public int maxArea (int[] height) {
    if (height.length < 2) return 0;
    
    int l = 0, r = height.length-1;
    int maxV = 0;
    
    while (l < r) {
      int lH = height[l], rH = height[r]; 
      int curV = Math.min(lH, rH) * (r-l);
      maxV = Math.max(maxV, curV);
      
      if (lH <= rH) {
        // find next higher left bar
        while (l < r && height[l] <= lH) {
          l++;
        }
      } else {
        // find next higher right bar
        while (l < r && height[r] <= rH) {
          r--;
        }
      }
    }
    
    return maxV;
  }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
10-03 21:58
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务