Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คอนเทนเนอร์ที่มีน้ำมากที่สุดใน Python


สมมุติว่าเรามี n จำนวนเต็มไม่เป็นลบ a1, a2, ..., an, แต่ละค่าแสดงถึงจุดที่พิกัด (i, a[i]) มีเส้นแนวตั้งในลักษณะที่จุดสิ้นสุดสองจุดของเส้น i อยู่ที่ (i, a[i]) และ (i, a[0]) เราต้องหาเส้นสองเส้น ซึ่งรวมกันกับแกน x ทำให้เกิดภาชนะเดียว ดังนั้นเป้าหมายของเราคือหาสองคอลัมน์ที่มีปริมาตรน้ำสูงสุด ดังนั้นหากอาร์เรย์เป็นแบบ [1,8,6,2,5,4,8,3,7] ก็จะเป็น

คอนเทนเนอร์ที่มีน้ำมากที่สุดใน Python

ในส่วนแรเงา ความสูงคือ 7 และมี 7 ส่วน ดังนั้นพื้นที่ทั้งหมดจึงเท่ากับ 7 * 7 =49 นี่คือผลลัพธ์

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้

  • ต่ำ :=0, สูง :=ความยาวของ arr – 1, ตอบ :=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