[leetcode] 11. Container With Most Water

반응형

문제

 


풀이
투 포인터로 풀면 된다.
배열의 처음(left)과 배열의 맨 끝부분(right)의 포인터를 이동하면서 가장 큰 area를 구하면 된다.
- area = (right - left) * min(height[left], height[right])

포인터의 이동은 left와 right의 height를 비교해서 left가 더 크면 right를 왼쪽으로 이동해주고 아니면 left를 오른쪽으로 이동해주면 된다. left가 right보다 크면 loop를 종료하면 된다.


코드

Java

class Solution {
    public int maxArea(int[] height) {
        int area = 0;
        int left = 0;
        int right = height.length - 1;

        while (left < right) {
            int tmpArea = (right - left) * Math.min(height[left], height[right]);
            area = Math.max(tmpArea, area);

            if (height[left] < height[right]) {
                left++;
            } else {
                right--;
            }
        }
        return area;
    }
}


Go

func maxArea(height []int) int {
	maxArea := 0
	left, right := 0, len(height)-1

	for left < right {
		tmpArea := (right - left) * min(height[left], height[right])

		if tmpArea > maxArea {
			maxArea = tmpArea
		}

		if height[left] < height[right] {
			left++
		} else {
			right--
		}

	}

	return maxArea
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

참고