leetcode-盛最多水的容器(c++)
題目
給你 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0) 。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器。
示例 1:
輸入:[1,8,6,2,5,4,8,3,7]
輸出:49 解釋:圖中垂直線代表輸入陣列
[1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49。
示例 2: 輸入:height = [1,1] 輸出:1
示例 3: 輸入:height = [4,3,2,1,4] 輸出:16
示例 4: 輸入:height = [1,2,1] 輸出:2
提示: n = height.length 2 <= n <= 3 * 104 0 <= height[i] <= 3 * 104
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/container-with-most-water
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路
1.暴力破解法:使用二重迴圈算出每一種可能性,後選取最大面積。
2.雙指標法:
由於容器可以容納的最大面積是由短板決定的,可以得出面積公式為面積公式為:
S(i, j) = min(h[i], h[j]) × (j - i)
- 無論是長板或者短板向內移動都會導致底邊長度(j-i)減小1
- 若向內移動長板則min(h[i],h[j])不變,或減小,則s(i,j)將減小
- 若向內移動短板則min(h[i],h[j])可能增大,s(i,j)可能增大
可以選取容器中的短板向內移動一格,可以有效的減少遍歷的次數且不丟失最大面積。
程式碼
- 暴力法(超出時間限制)
class Solution {
public:
int maxArea(vector<int>& height) {
int area=0;
int size=height.size();
if(size<=1){
return 0;
}
for(int i=0;i<size;i++){
for(int j=i+1;j<size;j++){
area = max(area,min(height[i],height[j])*(j-i));
}
}
return area;
}
};
- 雙指標法(更優)
class Solution {
public:
int maxArea(vector<int>& height) {
int i=0;
int j=height.size()-1;
int area=0;
while(i<j){
if(height[i]<height[j]){
area=max(area,height[i]*(j-i));
i++;
}else{
area=max(area,height[j]*(j-i));
j--;
}
}
return area;
}
};
相關文章
- 11.盛最多水的容器
- [leetCode]11. 盛最多水的容器LeetCode
- leetcode-11-盛最多水的容器LeetCode
- 【LeetCode】11. 盛最多水的容器LeetCode
- 【LeetCode Hot 100】11. 盛最多水的容器LeetCode
- 讓我們一起啃演算法----盛最多水的容器演算法
- 資料結構與演算法---盛最多水的容器、接雨水資料結構演算法
- 11_乘最多水的容器
- 動態規劃演算法——裝最多水的容器動態規劃演算法
- [LeetCode] Container With Most Water 裝最多水的容器LeetCodeAI
- LeetCodeHot100 283. 移動零 11. 盛最多水的容器 42. 接雨水 15. 三數之和LeetCode
- C++的vector容器C++
- C++ 容器vector的使用C++
- C++中的容器類C++
- C++ vector容器的swap方法(容器互換)C++
- 兩隻水壺 c++版C++
- C++ vector容器的swap方法C++
- C++ 向順序容器新增容器C++
- C++之vector容器C++
- c++ vector容器、字串C++字串
- C++ STL deque容器C++
- C++中的容器類詳解C++
- C++ stl容器詳解C++
- C++ STL容器總結C++
- C++ 容器介面卡C++
- C++容器演算法C++演算法
- C++ STL stack容器——棧C++
- C++ 順序容器的刪除操作C++
- c/c++ 標準順序容器 容器的訪問,刪除 操作C++
- C++順序容器講解C++
- C++實踐:STL容器reserveC++
- C++標準模板庫------容器C++
- 【LeetCode-棧】有效的括號LeetCode
- LeetCode-最小棧LeetCode
- C++ sort vector<vector<int> > or vector<MyClass> 容器的排序C++排序
- (C++) queue容器基礎知識C++
- C++ 順序容器大小操作 resizeC++
- 智慧水務系統:構建高效節水的城市水網