国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【力扣算法12】之 11. 盛最多水的容器 python

這篇具有很好參考價(jià)值的文章主要介紹了【力扣算法12】之 11. 盛最多水的容器 python。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

問(wèn)題描述

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

給定一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組 height 。有n條垂線,第i條線的兩個(gè)端點(diǎn)是(i, 0)(i, height[i])。
找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。
返回容器可以儲(chǔ)存的最大水量。
說(shuō)明:你不能傾斜容器。

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

示例1

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

輸入:[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

提示

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

思路分析

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

  1. 首先,我們定義了一個(gè)Solution類,其中包含解決問(wèn)題的方法maxArea。
  2. 方法maxArea接收一個(gè)整數(shù)數(shù)組height作為參數(shù)。
  3. 我們通過(guò)雙指針來(lái)解決這個(gè)問(wèn)題。左指針left初始化為數(shù)組的第一個(gè)元素下標(biāo)0,右指針right初始化為數(shù)組最后一個(gè)元素的下標(biāo)n-1。
  4. 初始化最大面積max_area為0。
  5. 進(jìn)入循環(huán),條件是左指針小于右指針。這是因?yàn)楫?dāng)左指針和右指針相遇時(shí),無(wú)法再構(gòu)成有效的容器。
  6. 在每一次循環(huán)中,我們計(jì)算當(dāng)前的面積curr_area。面積的計(jì)算公式是兩個(gè)指針?biāo)父叨容^小值乘以兩個(gè)指針之間的距離即(right - left)。
  7. 更新最大面積max_area,通過(guò)將當(dāng)前面積curr_area與max_area比較,如果curr_area更大,則更新max_area。
  8. 接下來(lái),根據(jù)以下三種情況移動(dòng)指針:
    • 如果height[left]小于height[right],那么我們將左指針left向右移動(dòng)一位,即left += 1,因?yàn)橐苿?dòng)左指針不能增加當(dāng)前的面積。
    • 如果height[left]大于height[right],那么我們將右指針right向左移動(dòng)一位,即right -= 1,因?yàn)橐苿?dòng)右指針不能增加當(dāng)前的面積。
    • 如果height[left]等于height[right],那么我們既可以移動(dòng)左指針也可以移動(dòng)右指針。在這種情況下,無(wú)論移動(dòng)哪個(gè)指針,都不會(huì)改變當(dāng)前的面積。
  9. 循環(huán)結(jié)束后,返回最大面積max_area作為結(jié)果。

這種解決方法的核心思想是通過(guò)不斷縮小有效寬度的范圍,來(lái)尋找容器的最大面積。通過(guò)比較較小高度的指針向內(nèi)移動(dòng),可以保留更有可能得到更大面積的高度。最終,我們得到了兩條垂線所形成容器的最大面積。

代碼分析

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

  1. 首先,我們定義了一個(gè)Solution類。
  2. 在類中,我們定義了一個(gè)方法maxArea,它接收一個(gè)整數(shù)數(shù)組height作為參數(shù)。
  3. 我們首先獲取數(shù)組height的長(zhǎng)度n,用于后續(xù)循環(huán)的條件判斷。
  4. 初始化左指針left為0,右指針right為數(shù)組最后一個(gè)元素的下標(biāo)n-1。
  5. 初始化最大面積max_area為0。
  6. 進(jìn)入循環(huán),條件是左指針left小于右指針right。
  7. 在循環(huán)中,我們計(jì)算當(dāng)前的面積curr_area,即兩個(gè)指針?biāo)父叨容^小值乘以兩個(gè)指針之間的距離,使用min()函數(shù)取得較小值。
  8. 更新最大面積max_area,通過(guò)將當(dāng)前面積curr_area與max_area比較,并將較大值賦給max_area,用max()函數(shù)實(shí)現(xiàn)。
  9. 接下來(lái),使用三個(gè)判斷條件來(lái)決定指針的移動(dòng):
    • 如果height[left]小于height[right],說(shuō)明左指針指向的高度較低,移動(dòng)左指針left向右移動(dòng)一位,即left += 1。
    • 如果height[left]大于height[right],說(shuō)明右指針指向的高度較低,移動(dòng)右指針right向左移動(dòng)一位,即right -= 1。
    • 如果height[left]等于height[right],說(shuō)明兩邊的高度相等,無(wú)論左指針left還是右指針right都可以移動(dòng),所以同時(shí)將左指針left向右移動(dòng)一位,即left += 1,右指針right向左移動(dòng)一位,即right -= 1。
  10. 循環(huán)結(jié)束后,返回最大面積max_area作為結(jié)果。

完整代碼

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

class Solution(object):
    def maxArea(self, height):
        n = len(height)  # 獲取數(shù)組height的長(zhǎng)度n
        left, right = 0, n - 1  # 初始化左指針left為0,右指針right為數(shù)組最后一個(gè)元素的下標(biāo)n-1
        max_area = 0  # 初始化最大面積max_area為0

        while left < right:  # 進(jìn)入循環(huán),條件是左指針left小于右指針right
            curr_area = min(height[left], height[right]) * (right - left)  # 計(jì)算當(dāng)前的面積curr_area,即兩個(gè)指針?biāo)父叨容^小值乘以兩個(gè)指針之間的距離
            max_area = max(max_area, curr_area)  # 更新最大面積max_area,通過(guò)將當(dāng)前面積curr_area與max_area比較,并將較大值賦給max_area

            if height[left] < height[right]:  # 如果height[left]小于height[right]
                left += 1  # 移動(dòng)左指針left向右移動(dòng)一位
            elif height[left] > height[right]:  # 如果height[left]大于height[right]
                right -= 1  # 移動(dòng)右指針right向左移動(dòng)一位
            else:  # 如果height[left]等于height[right]
                left += 1  # 同時(shí)移動(dòng)左指針left向右移動(dòng)一位
                right -= 1  # 同時(shí)移動(dòng)右指針right向左移動(dòng)一位
        
        return max_area  # 返回最大面積max_area作為結(jié)果

詳細(xì)分析

  1. 首先定義一個(gè)名為Solution的類。
class Solution(object):
  1. 然后,我們?cè)赟olution類中定義了一個(gè)名為maxArea的方法,該方法接收一個(gè)名為height的參數(shù)。
    def maxArea(self, height):
  1. 在方法體內(nèi)部,我們獲取數(shù)組height的長(zhǎng)度,并將結(jié)果賦給變量n。
        n = len(height)
  1. 接下來(lái),我們初始化左指針left為0,右指針right為數(shù)組最后一個(gè)元素的下標(biāo)n-1。
        left, right = 0, n - 1
  1. 我們還定義了一個(gè)變量max_area,并將其初始化為0,用于保存最大面積的值。
        max_area = 0
  1. 在接下來(lái)的while循環(huán)中,我們判斷左指針是否小于右指針,如果是,則執(zhí)行循環(huán)體內(nèi)的代碼。
        while left < right:
  1. 在循環(huán)體內(nèi)部,我們首先計(jì)算當(dāng)前的面積curr_area,即兩個(gè)指針?biāo)父叨容^小值乘以兩個(gè)指針之間的距離。
            curr_area = min(height[left], height[right]) * (right - left)
  1. 接著,我們更新最大面積max_area,通過(guò)將當(dāng)前面積curr_area與max_area比較,并將較大值賦給max_area。
            max_area = max(max_area, curr_area)
  1. 然后,我們根據(jù)左指針和右指針指向的高度來(lái)移動(dòng)指針。
  • 如果左指針指向的高度小于右指針指向的高度,則將左指針向右移動(dòng)一位。
            if height[left] < height[right]:
                left += 1
  • 如果左指針指向的高度大于右指針指向的高度,則將右指針向左移動(dòng)一位。
            elif height[left] > height[right]:
                right -= 1
  • 如果左指針指向的高度等于右指針指向的高度,則同時(shí)將左指針向右移動(dòng)一位,并將右指針向左移動(dòng)一位。
            else:
                left += 1
                right -= 1
  1. 循環(huán)結(jié)束后,我們返回最大面積max_area作為結(jié)果。
        return max_area

運(yùn)行效果截圖

調(diào)用示例

solution = Solution()
x = [1,8,6,2,5,4,8,3,7]
x1 = [1,1]
print(solution.maxArea(x))
print(solution.maxArea(x1))

運(yùn)行結(jié)果

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題

完結(jié)

【力扣算法12】之 11. 盛最多水的容器 python,python案例分析歸納,算法,leetcode,python,雙指針,最大面積,容器問(wèn)題,python面試題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-562378.html

到了這里,關(guān)于【力扣算法12】之 11. 盛最多水的容器 python的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 力扣-盛最多水的容器

    力扣-盛最多水的容器

    11.盛最多水的容器 給定一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組 height 。有 n 條垂線,第 i 條線的兩個(gè)端點(diǎn)是 (i, 0) 和 (i, height[i]) 。找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。返回容器可以儲(chǔ)存的最大水量。 說(shuō)明:你不能傾斜容器 示例1: 示例 2: 分析: 題解

    2024年01月15日
    瀏覽(13)
  • 【算法專題--雙指針?biāo)惴ā縧eecode-202. 快樂(lè)數(shù)(medium)、leecode-11. 盛最多水的容器(medium)

    【算法專題--雙指針?biāo)惴ā縧eecode-202. 快樂(lè)數(shù)(medium)、leecode-11. 盛最多水的容器(medium)

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫(kù)等等一系列知識(shí) ??感謝你的陪伴與支持 ,故事既有了開(kāi)頭,就要畫(huà)上一個(gè)完美的句號(hào),讓我們一起加油 雙指針 常見(jiàn)的雙指針有兩種形式,一種是對(duì)撞指針,?種是左右指針。 對(duì)撞指針:一般用于順序結(jié)構(gòu)中

    2024年03月23日
    瀏覽(22)
  • 11. 盛最多水的容器

    11. 盛最多水的容器

    給定一個(gè)長(zhǎng)度為? n ?的整數(shù)數(shù)組? height ?。有? n ?條垂線,第? i ?條線的兩個(gè)端點(diǎn)是? (i, 0) ?和? (i, height[i]) ?。 找出其中的兩條線,使得它們與? x ?軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲(chǔ)存的最大水量。 說(shuō)明: 你不能傾斜容器。 示例 1: 示例 2: 提示

    2024年01月20日
    瀏覽(25)
  • leetcode 11. 盛最多水的容器

    leetcode 11. 盛最多水的容器 解題思路 :雙指針 每次向內(nèi)移動(dòng)矮的指針,因?yàn)槿绻騼?nèi)移動(dòng)高的指針,面積一定會(huì)變??;如果向內(nèi)移動(dòng)矮的指針,面積還有可能變大。

    2024年02月06日
    瀏覽(20)
  • LeetCode_11. 盛最多水的容器

    11. 盛最多水的容器 - 力扣(LeetCode) https://leetcode.cn/problems/container-with-most-water/ ? ? ? ? 這題就是典型的是一道很經(jīng)典的面試題,最優(yōu)的解法是雙指針,但很多人在第一次看到這題的時(shí)候很難想到用雙指針來(lái)解(比如我)。好了,話不多說(shuō)上解法: 首先我們?cè)O(shè)兩個(gè)left和righ

    2024年02月14日
    瀏覽(32)
  • 11. 盛最多水的容器(c++題解)

    11. 盛最多水的容器(c++題解)

    給定一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組 height 。有 n 條垂線,第 i 條線的兩個(gè)端點(diǎn)是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲(chǔ)存的最大水量。 說(shuō)明:你不能傾斜容器。 示例 1: 輸入:[1,8,6,2,5,4,8,3,7] 輸出:49 解釋

    2024年02月11日
    瀏覽(18)
  • LeetCode_11_中等_盛最多水的容器

    LeetCode_11_中等_盛最多水的容器

    給定一個(gè)長(zhǎng)度為 n n n 的整數(shù)數(shù)組 h e i g h t height h e i g h t 。有 n n n 條垂線,第 i i i 條線的兩個(gè)端點(diǎn)是 ( i , 0 ) (i, 0) ( i , 0 ) 和 ( i , h e i g h t [ i ] ) (i, height[i]) ( i , h e i g h t [ i ]) 。 找出其中的兩條線,使得它們與 x x x 軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲(chǔ)存的

    2024年01月24日
    瀏覽(23)
  • 【算法專題】雙指針—盛最多水的容器

    【算法專題】雙指針—盛最多水的容器

    ? 分析這個(gè)題目不難得出一個(gè) 容積公式 ? 解法一:暴力枚舉(超時(shí)) 套用上述的容積公式,使用 兩個(gè)for循環(huán) 來(lái)枚舉出所有可能的情況,再挑出最大值即可,但是這種寫(xiě)法會(huì)超時(shí),導(dǎo)致不通過(guò)。時(shí)間復(fù)雜度是O(n^2) 可以自己去嘗試一下。? 解法二:雙指針? 設(shè)兩個(gè)指針 left,

    2024年02月06日
    瀏覽(18)
  • 「優(yōu)選算法刷題」:盛最多水的容器

    「優(yōu)選算法刷題」:盛最多水的容器

    給定一個(gè)長(zhǎng)度為? n ?的整數(shù)數(shù)組? height ?。有? n ?條垂線,第? i ?條線的兩個(gè)端點(diǎn)是? (i, 0) ?和? (i, height[i]) ?。 找出其中的兩條線,使得它們與? x ?軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲(chǔ)存的最大水量。 說(shuō)明: 你不能傾斜容器。 示例 1: 示例 2: 這道

    2024年01月19日
    瀏覽(18)
  • 【算法】雙指針求解盛最多水的容器

    【算法】雙指針求解盛最多水的容器

    Problem: 11. 盛最多水的容器 首先我們來(lái)解析一下本題 題目中說(shuō)到,要找出其中的兩條線, 使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水 。 那我們現(xiàn)在來(lái)看最外側(cè)的兩根,一個(gè)高度為8,一個(gè)則為7,那我們肯定選擇高度為7的, 如果選擇8的話就會(huì)出現(xiàn)溢出的問(wèn)題 ;我們這

    2024年02月11日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包