Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm kích thước của danh sách con trong đó tích tối thiểu của A và kích thước của A được tối đa hóa bằng Python

Giả sử chúng ta có một danh sách các số được gọi là num và một giá trị khác pos. Chúng ta phải tìm một danh sách con A gồm các num bao gồm vị trí chỉ mục sao cho (tối thiểu là A) * (kích thước của A) là cực đại sau đó trả về giá trị.

Vì vậy, nếu đầu vào là nums =[-2, 2, 5, 4] pos =3, thì đầu ra sẽ là 8, vì danh sách con tốt nhất là [5, 4], bởi vì (5, 4) =4 và kích thước của nó là 2 chúng ta có 4 * 2 =8.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

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

  • i:=pos, j:=pos

  • làm như sau cho tôi trong phạm vi từ 0 đến kích thước là A - 1, thực hiện

    • left:=A [i - 1] if i - 1> =0 if else -inf

    • right:=A [j + 1] nếu j + 1

    • nếu left> =right thì

      • i:=i - 1

      • m:=tối thiểu của m và A [i]

    • nếu không,

      • j:=j + 1

      • m:=tối thiểu của m và A [j]

    • ans:=tối đa ans và (m * (j - i + 1))

  • trả lại ans

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

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

Đầu ra

8