题目: https://leetcode-cn.com/problems/container-with-most-water/
思路:
1.暴力法
首先,我们能快速想到的一种方法:两两进行求解,计算可以承载的水量。 然后不断更新最大值,最后返回最大值即可。
这种解法,需要两层循环,时间复杂度是O(n^2)。
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let max = 0
for(let i = 0; i < height.length-1; i++){
for(let j = i+1; j < height.length; j++){
let area = (j-1) * Math.min(height[i], height[j])
max = Math.max(max, area)
}
}
return max
};
2.双指针
有点类似双指针的概念,左指针指向下标 0,右指针指向length-1。然后分别从左右两侧向中间移动,每次取小的那个值(因为水的高度肯定是以小的那个为准)。
如果左侧小于右侧,则i++,否则j–
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let low = 0
let high = height.length - 1
let max = 0
while(low < high){
let min = Math.min(height[low], height[high])
let area = min * (high - low)
max = Math.max(max, area)
if(height[low] < height[high]){
low++
}else {
high--
}
}
return max
};