leetcode --- js版本程序员

leetcode-Medium-第11期-数组-Containe

2019-03-05  本文已影响2人  石头说钱

给出一个数组,索引 代表x轴线坐标,值代表Y轴坐标,求数组中两个值在坐标轴能包含的最大面积

屏幕快照 2019-03-05 下午10.10.57.png

上图蓝色面积就是下面input数组在坐标轴所能包含的最大面积:
8x7x(9-2)=49

Input: [1,8,6,2,5,4,8,3,7]
Output: 49
var maxArea = function(arr){
  const len = arr.length;
  let max = 0;
  for(let i = 0; i < len; i++){
    for(let j = i + 1; j < len; j++){
      const area = Math.min(arr[i],arr[j]) * (j-i)
      if(area > max){
        max = area
      }
    }
  }
  return max
}

面积 = 底*高 = L*H
1 肯定需要两个值,一个左边一个右边
2 先取首尾的值,因为他们的相距最远L最长,然后高为短的那条(如果取长的,短的那条不够无法形成闭合),这样得到一个面积S
3 从两边往中间遍历,看能不能取到更大的面积S,虽然从两边往中间靠,L会变短,但是H可能会取得更大呀
4 所以这个时候就要判断左边和右边的那个值更小,就舍弃他,取舍弃他后向中间靠的下一个值
5 然后再次算面积,并进行判断...
6 当左值和右值靠在一起时,遍历结束

var max = function(arr){
  let l = 0
  let r = arr.length - 1;
    let max = 0;
    while (l < r) {
        max = Math.max(max, Math.min(arr[l], arr[r])* (r - l));
        if (arr[l] < arr[r])
            l++;
        else
            r--;
    }
    return max;
}

上一篇下一篇

猜你喜欢

热点阅读