11.盛最多水的容器
給定一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組 height 。有 n 條垂線,第 i 條線的兩個(gè)端點(diǎn)是 (i, 0) 和 (i, height[i]) 。找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。返回容器可以儲(chǔ)存的最大水量。
說明:你不能傾斜容器
示例1:
輸入:[1,8,6,2,5,4,8,3,7]
輸出:49
解釋:圖中垂直線代表輸入數(shù)組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍(lán)色部分)的最大值為 49
示例 2:
輸入:height = [1,1]
輸出:1
分析:文章來源:http://www.zghlxwxcb.cn/news/detail-791835.html
已知:
1、容器所裝的水量由高度min(height[i],height[j])、寬度(j - i)所決定
2、容器包圍面積公式:S(i,j) = min(h[i],h[j])×(j?i)
3、當(dāng)木板向兩側(cè)移動(dòng)時(shí),寬度和高度都會(huì)隨之改變,即面積時(shí)刻發(fā)生改變,求在此基礎(chǔ)上,盛最多水的容器所圍成的面積
求解算法: 雙指針
1、初始化兩個(gè)參數(shù),即最左指針left,最右指針right
2、while語句判斷,當(dāng)左右指針相遇的時(shí)候,跳出循環(huán),未相遇時(shí),求解每個(gè)狀態(tài)下,隨著木板移動(dòng),導(dǎo)致容器面積發(fā)生變化的值
3、返回容器最大的面積值
題解:文章來源地址http://www.zghlxwxcb.cn/news/detail-791835.html
public int maxArea(int[] height) {
// 初始化兩個(gè)參數(shù),即最左指針left,最右指針right
int left = 0;
int right = height.length - 1;
// 初始化一個(gè)結(jié)果值res 0
int res = 0;
// 循環(huán)判斷
while(left <= right){
// 容器面積 計(jì)算公式
int area = Math.min(height[left],height[right])*(right - left);
// 將面積的最大值賦給 res
res = Math.max(res,area);
if(height[left] > height[right]){
right --;
}else{
left ++;
}
}
return res;
}
到了這里,關(guān)于力扣-盛最多水的容器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!