11.盛最多水的容器

給定 n 個非負整數 a1,a2孤页,...,an涩馆,每個數代表坐標中的一個點 (i, ai) 行施。在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)魂那。找出其中的兩條線蛾号,使得它們與 x 軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器涯雅,且 n 的值至少為 2鲜结。


圖中垂直線代表輸入數組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49精刷。

輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49

思路一:暴力的雙重循環(huán)

時間復雜度為O(n^2),在數據量較大的時候拗胜,性能很差

思路二:雙指針

  • 核心思想: 減少循環(huán)的核心思路是省去沒有必要的遍歷,并且確保所需的答案一定能被遍歷到怒允。容器的盛水量取決于容器的底和容器較短的那條高埂软。 容器高度較大的一側的移動只會造成容器盛水量減小,所以應當移動高度較小一側的指針纫事,并繼續(xù)遍歷仰美,直至兩指針相遇 。
  • 分析:主要的困惑在于如何移動雙指針才能保證最大的盛水量被遍歷到假設有左指針left和右指針right儿礼,且left指向的值小于right的值,假如我們將右指針左移庆寺,則右指針左移后的值和左指針指向的值相比有三種情況:
    1. 右指針指向的值大于左指針這種情況下蚊夫,容器的高取決于左指針,但是底變短了懦尝,所以容器盛水量一定變小.
    2. 右指針指向的值等于左指針這種情況下知纷,容器的高取決于左指針,但是底變短了陵霉,所以容器盛水量一定變小.
    3. 右指針指向的值小于左指針這種情況下琅轧,容器的高取決于右指針,但是右指針小于左指針踊挠,且底也變短了乍桂,所以容量盛水量一定變小了.
      std:max
      c++ code: AC
class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0;
        int right = height.capacity() - 1;
        int maxArea = 0;
        while (left < right)
        {
            maxArea = max(maxArea, (right - left)*min(height[left], height[right]));
            if (height[left] < height[right])
                left++;
            else
                right--;
        }
        return maxArea;
    }
};


測試框架:

void trimLeftTrailingSpaces(string &input) {
    input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {
        return !isspace(ch);
    }));
}

void trimRightTrailingSpaces(string &input) {
    input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {
        return !isspace(ch);
    }).base(), input.end());
}

vector<int> stringToIntegerVector(string input) {
    vector<int> output;
    trimLeftTrailingSpaces(input);
    trimRightTrailingSpaces(input);
    input = input.substr(1, input.length() - 2);
    stringstream ss;
    ss.str(input);
    string item;
    char delim = ',';
    while (getline(ss, item, delim)) {
        output.push_back(stoi(item));
    }
    return output;
}

int main() {
    string line;
    while (getline(cin, line)) {
        vector<int> height = stringToIntegerVector(line);

        int ret = Solution().maxArea(height);

        string out = to_string(ret);
        cout << out << endl;
    }
    return 0;
}



參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市效床,隨后出現的幾起案子睹酌,更是在濱河造成了極大的恐慌,老刑警劉巖剩檀,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋沿,死亡現場離奇詭異,居然都是意外死亡沪猴,警方通過查閱死者的電腦和手機辐啄,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來运嗜,“玉大人壶辜,你說我怎么就攤上這事∠闯觯” “怎么了士复?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我阱洪,道長便贵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任冗荸,我火速辦了婚禮承璃,結果婚禮上,老公的妹妹穿的比我還像新娘蚌本。我一直安慰自己盔粹,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布程癌。 她就那樣靜靜地躺著舷嗡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嵌莉。 梳的紋絲不亂的頭發(fā)上进萄,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音锐峭,去河邊找鬼中鼠。 笑死,一個胖子當著我的面吹牛沿癞,可吹牛的內容都是我干的援雇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼椎扬,長吁一口氣:“原來是場噩夢啊……” “哼惫搏!你這毒婦竟也來了?” 一聲冷哼從身側響起蚕涤,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤晶府,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钻趋,有當地人在樹林里發(fā)現了一具尸體川陆,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年蛮位,在試婚紗的時候發(fā)現自己被綠了较沪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡失仁,死狀恐怖尸曼,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情萄焦,我是刑警寧澤控轿,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布冤竹,位于F島的核電站,受9級特大地震影響茬射,放射性物質發(fā)生泄漏鹦蠕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一在抛、第九天 我趴在偏房一處隱蔽的房頂上張望钟病。 院中可真熱鬧,春花似錦刚梭、人聲如沸肠阱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屹徘。三九已至,卻和暖如春衅金,著一層夾襖步出監(jiān)牢的瞬間缘回,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工典挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啦吧。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓您觉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親授滓。 傳聞我的和親對象是個殘疾皇子琳水,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 給定 n 個非負整數 a1,a2般堆,...在孝,an,每個數代表坐標中的一個點 (i, ai) 淮摔。在坐標內畫 n 條垂直...
    閉門造折閱讀 139評論 0 0
  • 給定 n 個非負整數 a1私沮,a2,...和橙,an仔燕,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直...
    vbuer閱讀 205評論 0 0
  • 題目 給定 n 個非負整數 a1魔招,a2晰搀,...,an办斑,每個數代表坐標中的一個點 (i, ai) 外恕。在坐標內畫 n ...
    sxqiong閱讀 308評論 2 0
  • 一、題目原型: 給定 n 個非負整數 a1,a2鳞疲,...罪郊,an,每個數代表坐標中的一個點 (i, ai) 建丧。畫 n...
    花果山松鼠閱讀 644評論 0 0
  • 作者: 涼白唐 1 min read 3人收錄 愿你是一棵樹 有一片屬于自己的泥土 清晨陽光普照排龄,暮夜皎月明亮...
    涼白唐閱讀 1,286評論 2 3