---
# System prepended metadata

title: '**Leetcode筆記(Container With Most Water)**'
tags: [arrays, medium, microsoft, leetcode]

---

# **Leetcode筆記(Container With Most Water)**


:::info
:information_source: 題目 : Container With Most Water, 類型 : arrays , 等級 : medium
日期 : 2023/02/22，2023/05/03，2023/06/27，2023/03/25，2024/10/02
:::


### 嘗試

值得鼓勵，想到two pointer法，思路也大致對，但實在不用l = i，時間複雜度O(n^2)

```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        res = 0
        for i, n in enumerate(height):
            r = len(height) - 1
            l = i
            while l < r:
                if height[r] >= height[l]:
                    area = height[l] * (r - l)
                    l += l
                else:
                    area = height[r] * (r - l)
                    r += r
                res = max(res, area)
                
        return res
```
2023/05/03
```python
# 如果右邊比較高，代表右邊會是最有成功機率的一面牆，所以不能捨棄，故移動左邊牆

class Solution:
    def maxArea(self, height: List[int]) -> int:
        
        l, r = 0, len(height) - 1
        res = 0
        temp_height = 0

        while l < r:
            temp_height = min(height[l], height[r])
            res = max(res, temp_height * (r - l))
            # 如何決定要往左還是往右移
            if height[r] >= height[l]:
                l += 1
            else:
                r -= 1
        
        return res
```
2023/06/27
```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        l, r = 0, len(height) - 1
        maxArea = 0

        while l < r:
            maxArea = max( maxArea, min(height[l], height[r]) * (r - l) ) 
            if height[l] > height[r]:
                r -= 1
            elif height[l] <= height[r]:
                l += 1
        
        return maxArea
```
2023/12/02
```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        maxRes = float("-inf")
        l, r = 0, len(height) - 1
        while l < r:
            area = min(height[l], height[r]) * (r -l)
            maxRes = max(maxRes, area)
            # update the smallest boundary with the smallest heigth
            if height[l] < height[r]:
                l += 1
            else:
                r -= 1
        return maxRes
```
2023/03/25
```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        l, r = 0, len(height) - 1
        maxRes = 0

        while l < r:
            maxRes = max(maxRes, (r - l) * min(height[l], height[r]))
            if height[l] < height[r]:
                l += 1
            else:
                r -= 1
        
        return maxRes
```
2024/10/02
```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        l, r = 0, len(height) - 1
        maxArea = 0

        while l < r:
            area = (r - l) * min(height[l], height[r])
            maxArea = max(maxArea, area)
            if height[l] > height[r]:
                r -= 1
            else:
                l += 1

        return maxArea
```

---
### **優化**

時間複雜度O(n)

```python
class Solution:
    def maxArea(self, height: List[int]) -> int:
        res = 0
        l, r = 0, len(height) - 1

        while l < r:
            area = min(height[l], height[r]) * (r - l)
            res = max(res, area)
            if height[r] >= height[l]:
                l += 1
            else:
                r -= 1
 
        return res
```
---


**:warning: 錯誤語法** 
:::warning
Time Limit Exceeded可能是用太多時間(錯的方法)去跑
r -= 1 是減不是加，還有不是r -= r
:::


**:thumbsup:學習** 
:::success
可以被簡化在一個min中選擇area = min(height[l], height[r]) * (r - l)
:::

**思路**

**講解連結**
https://www.youtube.com/watch?v=UuiTKBwPgAo
Provided by. NeetCode

###### tags: `arrays` `medium` `leetcode` 