Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 대부분의 물이 담긴 컨테이너


n개의 음이 아닌 정수 a1, a2, ..., an, 각 값이 좌표(i, a[i])의 한 점을 나타낸다고 가정합니다. 라인 i의 두 끝점이 (i, a[i]) 및 (i, a[0])에 있도록 n개의 수직선이 존재합니다. x축과 함께 하나의 컨테이너를 형성하는 두 개의 선을 찾아야 하므로 물의 양이 최대인 두 개의 열을 찾는 것이 목표입니다. 따라서 배열이 [1,8,6,2,5,4,8,3,7]과 같으면

Python에서 대부분의 물이 담긴 컨테이너

음영 처리된 부분은 높이가 7이고 섹션이 7개이므로 전체 면적은 실제로 7 * 7 =49입니다. 이것이 출력입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • low :=0, high :=arr의 길이 – 1, ans :=0
  • 낮은 동안 <높음
    • arr[낮음]
    • 그렇지 않으면 min_h :=height[high] 및 min_ind :=high
    • ans :=(높음 – 낮음)* min_h 및 ans의 최대값
    • 낮은 값 + 1 =min_ind + 1이면 낮은 값을 1씩 늘리고 그렇지 않으면 높은 값을 1씩 줄입니다.
  • 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   def maxArea(self, height):
      low = 0
      high = len(height) - 1
      ans = 0
      while low < high:
         if height[low]<height[high]:
            min_height = height[low]
            min_height_index = low
         else:
            min_height = height[high]
            min_height_index = high
         ans = max(((high - low) ) * min_height,ans)
         if low+1==min_height_index+1:
            low+=1
         else:
            high-=1
      return ans
ob1 = Solution()
print(ob1.maxArea([1,8,6,2,5,4,8,3,7]))

입력

[1,8,6,2,5,4,8,3,7]

출력

49