1. 程式人生 > >lintcode刷題——裝最多水的容器

lintcode刷題——裝最多水的容器

lintcode刷題之裝最多水的容器,原題如下所示:

給定 n 個非負整數 a1, a2, ..., an, 每個數代表了座標中的一個點 (i, ai)。畫 n 條垂直線,使得 i 垂直線的兩個端點分別為(i, ai)(i, 0)。找到兩條線,使得其與 x 軸共同構成一個容器,以容納最多水。

 注意事項

容器不可傾斜。

您在真實的面試中是否遇到過這個題?  Yes 樣例

給出[1,3,2], 最大的儲水面積是2.

這道題理解起來並不困難,具體思路如下:

1、首先想到的最笨的辦法就是雙重迴圈,出水面積就是兩個點中的ai較小的值乘以兩個點的下標的差值;

2、雙重迴圈顯然時間複雜度太高,這時想到用兩個指標一頭一尾向中間靠攏,若依舊使用兩個for迴圈來做時間複雜度依舊不滿足條件;

3、考慮用一個while迴圈,加上一個判斷條件,就是裝水的多少受限於短的一條線,於是加上判斷,保留兩者之中較長的一條線。

具體C++程式碼如下所示:

class Solution {
public:
    /*
     * @param : a vector of integers
     * @return: an integer
     */
    int maxArea(vector<int> heights) {
        // write your code here
        int l=heights.size();
        if(l==0||l==1)
        return 0;
        int watermax=0;
        int i=0,j=l-1;
       /* for(i=0;i<l;i++)
        {
            int lheight=heights[i];
            int li=i;
            for(j=l-1;j>i;j--)
            {
                watermax=max(min(lheight,heights[j])*(j-i),watermax);
            }
        }*/註釋部分為兩個for迴圈程式碼,時間超過限制
        while(i<j)
        {
           watermax=max(min(heights[i],heights[j])*(j-i),watermax);
           if(heights[i]<heights[j])
           {
               i++;
           }
           else
           {
               j--;
           }
        }
        return watermax;
    }
};

相關推薦

lintcode——容器

lintcode刷題之裝最多水的容器,原題如下所示: 給定 n 個非負整數 a1, a2, ..., an, 每個數代表了座標中的一個點 (i, ai)。畫 n 條垂直線,使得 i 垂直線的兩個端點分別為(i, ai)和(i, 0)。找到兩條線,使得其與 x 軸共同

LeetCode 11. Container With Most Water (容器

cheng 個數 參考 找到 資料 算法題目 pointer etc html Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a

[LeetCode] 11. Container With Most Water 容器

OS python oge containe 較高的 contains tco water IT Given n non-negative integers a1, a2, ..., an, where each represents a point at coordina

leetcode11 容器(要學會簡化問題)

AR nbsp where represent ++ with ner 一個 oge 簡化問題後的代碼 /* 原問題: Given n non-negative integers a1, a2, ..., an, where each repres

【LeetCode】#11容器(Container With Most Water)

【LeetCode】#11裝最多水的容器(Container With Most Water) 題目描述 給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。

[LeetCode] Container With Most Water 容器

Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoint

11. Container With Most Water(求能容器

Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that t

容器

題目描述:給定 n 個非負整數 a1, a2, ..., an, 每個數代表了座標中的一個點 (i, ai)。畫 n 條垂直線,使得 i 垂直線的兩個端點分別為(i, ai)和(i, 0)。找到兩條線

22.Container With Most Water(能容器

圖片 int HERE ted 什麽 坐標 image pre ins Level: ??Medium 題目描述: Given n non-negative integers a1, a2, ..., an , where each represents a point a

動態規劃演算法——容器

動態規劃概述   動態規劃(Dynamic Programming,DP)是運籌學的一個分支,是求解決策過程最優化的過程。   動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解,每一個解都對應於一個值,我們希望找到具有最優值的解。   動態規劃演算法與分治法類似,其基本思想也

LeetCode筆記(十一)盛容器

題目:給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。畫 n 條垂直線,使得垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。注意:你不能傾斜容器,n

leetcode11. 盛容器

mission .com max ons nbsp lee bmi miss 面積 做題連接https://leetcode-cn.com/problems/container-with-most-water/submissions/本題分為兩種方法:暴力法: int ma

11. Container With Most Water 容器

異常 style http 指針 param post aps wid lose [抄題]: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate

【LeetCode 中等】6-盛容器

宣告: 今天是中等題第6道題。給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, 

leetcode第11:盛容器

給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,

LeetCode庫11:盛容器——JavaScript解答

題目描述: 給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的

leetcode庫——盛容器

題目描述: 給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其

LeetCode第11容器

max col 移動 ger 最大值 turn 個數 容量 height /* 給定 n 個非負整數 a1,a2,...,an,每個數代表坐標中的一個點 (i, ai) 。 在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。 找

LeetCode庫解答與分析——#11.盛容器ContainerWithMostWater

#11 盛最多水的容器 Container With Most Water給定 n 個正整數 a1,a2,...,an,其中每個點的座標用(i, ai)表示。 畫 n 條直線,使得線 i 的兩個端點處於(i,ai)和(i,0)處。請找出其中的兩條直線,使得他們與 X 軸形成的

[leetcode] 11.盛容器

scrip alt 分享 containe 可能性 其中 .com 大於 leetcode 盛最多水的容器 題意好繞,看半天都沒懂要幹什麽。 我直接上個圖可能就能一眼看明白了: 總之,當明白題意後,直接就能想到暴力法枚舉所有可能性,不過如果再畫一下圖基本就能發現:兩線段之