포스트

Container With Most Water

LeetCode 11. Container With Most Water

원문

You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]).

Find two lines that together with the x-axis from a container, such that the container contains the most water.

Return the maximum amount of water a container can store.

Notice that you may not slant the container.

풀이

투포인터.

왼쪽 경계의 인덱스를 lo, 오른쪽 경계의 인덱스를 hi라고 했을 때 height[lo]height[hi]의 값을 비교해 인덱스 값을 변경한다.
height[lo]height[hi]보다 작으면 lo에 1을 더하지만, 그렇지 않은 경우에는 hi에서 1을 뺀다.

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
    def maxArea(self, height: List[int]) -> int:
        lo, hi = 0, len(height) - 1
        result = 0

        while lo < hi:
            result = max(result, (hi - lo) * min(height[lo], height[hi]))

            if height[lo] < height[hi]:
                lo += 1
            else:
                hi -= 1

        return result

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
    public int maxArea(int[] height) {
        int lo = 0;
        int hi = height.length - 1;
        int water = 0;

        while (lo < hi) {
            water = Math.max(water, (hi - lo) * Math.min(height[lo], height[hi]));

            if (height[lo] < height[hi]) {
                lo++;
            } else {
                hi--;
            }
        }
        
        return water;
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.