설명
을 감안할 N 음이 아닌 정수 (A2)가, ...는 점 (나는, AI) 각각은 좌표의 개수를 나타내고, A1. 수직 영화 N 라인 나는 지점 (I, AI) 및 (I, 0)이다 수직선 두 끝 좌표. 용기와 함께 X 축 구성은 물을 수용 할 수 있도록 두 개의 라인을 알아.
참고 : 컨테이너를 기울 할 수 없으며, n의 값이 적어도 2입니다.
예를 들면
아이디어
- 문제의 해결책은 아이가 문제의 해결책에 대한 도움말을 제공 할 수 있기 때문에 동적 프로그래밍, 부적절
- 키 : I, J는 상기 용기의 벽의 폭이다 지, 높이 (높이 [I], 높이 [J])
- 방법 1 : 폭력 법, 두 개의 루프에 대한
- 방법 2 : 두 개의 포인터, 스크래치, 꼬리에서 시작, 현재 컨테이너의 최대 너비, 다음 점차적으로 당신이 보류 물을 원하는 많은 경우, 폭을 줄이고, 컨테이너의 벽이 있어야합니다 높은
응답 - 파이썬
*方法1*
def maxArea(self, arr: List[int]) -> int:
area = 0
for i in range(len(arr)):
for j in range(i+1,len(arr)):
height = arr[i] if arr[i]<arr[j] else arr[j]
width = j-i
if height*width>area:
area = height*width
return area
*方法2*
def maxArea(self, height: List[int]) -> int:
i,j=0,len(height)-1
area = 0
while i<j:
h = min(height[i], height[j])
area = max(area, h*(j-i))
if height[i]<height[j]: i+=1
else: j-=1
return area
- C ++
*方法1*
int maxArea(vector<int>& height) {
int area=0;
for (int i=0; i<height.size(); i++)
for (int j=i+1; j<height.size(); j++)
{
int h = min(height[i],height[j]);//最短的板
area = max(h*(j-i),area);
}
return area;
}
*方法2*
int maxArea(vector<int>& height) {
int area=0;
int i=0,j=height.size()-1;
while (i<j)
{
int h = min(height[i], height[j]);
area = max(area, h*(j-i));
if (height[i]<height[j]) i++;
else j--;
}
return area;
}