11. 컨테이너와 대부분의 물이 더 많은 물을 저장 []

설명
을 감안할 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;
    }
게시 78 개 원래 기사 · 원 찬양 7 ·은 10000 +를 볼

추천

출처blog.csdn.net/puspos/article/details/103036766