Leet code(盛水的最大面积) 前端刷题解法记录与思考

372 阅读1分钟

image.png

先看要求 给你一个数组,数组里面的每一项代表水池的高度,求出两个高度之间盛水最高的面积

思路

1.循环数组,将每一种面积情况都求出来 选出面积最大的哪一项 (但性能很差)
2.双指针解法从左边和右边同时出发,谁的高度低谁优先向中间靠拢,直到重合
var maxArea = function (height = [1, 8, 9, 2, 5, 9, 8, 3, 9]) {
  //左边下标用l表示 右边下标用r表示
  let sum = 0; //面积
  let max = 0; //最大面积
  let l = 0; //左坐标
  let r = height.length - 1; //右坐标
  while (l < r) {
    // l从左边第一位出发,r从右边第一位出发 ,每一次得到的的面积通过sum保存起来
    sum = Math.min(height[l], height[r]) * (r - l);
    //左边低l++  右边低 r--
    height[l] - height[r] < 0 ? l++ : r--;
    //求出所有结果的最大值
    max = Math.max(max, sum);
  }
  return max;
};

image.png