LeetCode---Container with most water


瞭解答案之後覺得這道題確實不是一道很難的題目,但是在做的時候也是各種糾結怎麼做。

記錄一下自己的解題心路歷程吧
1. 遍歷所有的數值,然後比較每個點的flag值的大小,運行時間肯定超了;

2. 後來,一想到只要找到比當前點值大的點就達到遍歷的目的,精簡後還是時間超了;

3. 針對每個點從距離最遠的點開始遍歷直到找到大於該點的值,時間還是超了;

4. 然後借鑑了Gitbooks上一個小夥伴的解題思路 https://siddontang.gitbooks.io/leetcode-solution/content/array/largest_rectangle_in_histogram.html ,但是他的題目是矩形和本題的線的求解不同,但是他使用的隊列的思路非常好,只可惜不符合本題;

5. 最後,還是美其名曰的借鑑了LeetCode提供的答案:

從兩側開始找最大的矩形,有且僅有下一個矩形的高度增加的面積大於寬度減小的面積,下一個矩形纔有可能面積大於兩側最寬的矩形;因此從兩側依次往裏遍歷,在寬度減小的情況下,使下一個矩形的高度大於之前的矩形高度;其實是一個控制變量的思路,先找到寬度最大的矩形,然後變化高度,保證寬度減小面積也能增大。

具體代碼如下:

#include
#include
#include
#include

using namespace std;

class Solution {
public:
	int maxArea(vector& height) {
	    //考慮兩邊最有可能成爲最大值的情況:邊的長度增加的好處大於寬度縮小的好處;
		//對應的情況就是關鍵邊邊長,寬度減小。
		int l = 0;
		int r = height.size() - 1;
		int sum = 0;
		while (l nums1(&a[0], &a[len1]);
	double result;
	result = sol.maxArea(nums1);
	cout << result << endl;
	system("pause");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章