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

โปรแกรมค้นหาขนาดของรายการย่อยที่ผลิตภัณฑ์ขั้นต่ำของ A และขนาดของ A ถูกขยายให้ใหญ่สุดใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งเป็น pos เราต้องหารายการย่อย A ของ nums ที่มีดัชนี pos ที่ (ขั้นต่ำของ A) * (ขนาด A) ถูกขยายให้ใหญ่สุดแล้วคืนค่ากลับ

ดังนั้น หากอินพุตเท่ากับ nums =[-2, 2, 5, 4] pos =3 เอาต์พุตจะเป็น 8 เนื่องจากรายการย่อยที่ดีที่สุดคือ [5, 4] เพราะ (5, 4) =4 และ ขนาดของมันคือ 2 เรามี 4 * 2 =8

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

  • ans :=A[pos], m :=A[pos]

  • ผม :=pos, j :=pos

  • ทำสิ่งต่อไปนี้สำหรับ i ในช่วง 0 ถึงขนาด A - 1 ทำ

    • left :=A[i - 1] if i - 1>=0 มิฉะนั้น -inf

    • right :=A[j + 1] if j + 1

    • ถ้าซ้าย>=ขวา แล้ว

      • ผม :=ผม - 1

      • m :=ขั้นต่ำของ m และ A[i]

    • มิฉะนั้น

      • เจ :=เจ + 1

      • m :=ขั้นต่ำของ m และ A[j]

    • ans :=สูงสุดของ ans และ (m *(j - i + 1))

  • กลับมาอีกครั้ง

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution:
   def solve(self, A, pos):
      NINF = float("-inf")
      ans = m = A[pos]
      i = pos
      j = pos
      for _ in range(len(A) - 1):
         left = A[i - 1] if i - 1 >= 0 else NINF
         right = A[j + 1] if j + 1 < len(A) else NINF
         if left >= right:
            i -= 1
            m = min(m, A[i])
         else:
            j += 1
            m = min(m, A[j])
         ans = max(ans, m * (j - i + 1))
      return ans
ob = Solution()
nums = [-2, 2, 5, 4]
pos = 3
print(ob.solve(nums, pos))

อินพุต

[-2, 2, 5, 4], 3

ผลลัพธ์

8