题目

11. 盛最多水的容器

RGGm14

题解

max = (end - start) * getMin(height[end], height[start])

  1. 暴力解法 就遍历两轮计算所有两个坐标值之间的情况,会超时
  2. 双指针法,从首尾两点开始计算,两点距离不变,max值取决于value小的数据,哪端小哪端往中间靠,到首尾坐标相等时候结束遍历,计算出所有可能存在的最大值中取最大值。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
  let start = 0;
  let end = height.length - 1;
  let max = 0;

  while(end - start >= 1) {
    let endValue = height[end];
    let startValue = height[start] 
    const tmp = (end - start) * (endValue > startValue ? startValue : endValue);
    max =  tmp > max ? tmp : max;
    if(endValue > startValue) {
      start += 1;
    }else {
      end -= 1;
    }    
  }
  return max;
};