물이 가장 많은 용기

길이가 n인 정수 배열 높이가 주어집니다. i번째 선의 두 끝점이 (i, 0)과 (i, height[i])가 되도록 n개의 수직선이 그려집니다.



컨테이너에 가장 많은 물이 들어 있는 것과 같이 x축과 함께 컨테이너를 형성하는 두 개의 선을 찾습니다.

용기가 저장할 수 있는 최대 물의 양을 반환합니다.

컨테이너를 기울일 수 없습니다.

https://leetcode.com/problems/container-with-most-water/에서 가져온 문제 설명




무차별 접근

var maxArea = function (heights) {
    let maxArea = 0;
    for (let p1 = 0; p1 < heights.length; p1++) {
        for (let p2 = p1 + 1; p2 < heights.length; p2++) {
            const length = Math.min(heights[p1], heights[p2]);
            const width = p2 - p1;
            const area = length * width;
            maxArea = Math.max(area, maxArea);
        }
    }
    return maxArea;
}


시간 복잡도 : O(n^2)
공간 복잡도 : O(1)

최적화된 접근법

    let maxArea = 0, p1 = 0, p2 = heights.length - 1;
    while (p1 < p2) {
        const height = Math.min(heights[p1], heights[p2]);
        const width = p2 - p1;
        const area = height * width;
        maxArea = Math.max(maxArea, area);
        if (heights[p1] <= heights[p2]) {
            p1++;
        } else {
            p2--;
        }
    }
    return maxArea;


시간 복잡도 : O(n)
공간 복잡도 : O(1)

좋은 웹페이지 즐겨찾기