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

Chương trình tìm độ dài của danh sách con tăng dần liền kề trong Python

Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải tìm độ dài tối đa của một danh sách con tăng dần liền kề khi chúng ta có thể xóa một hoặc không phần tử khỏi danh sách.

Vì vậy, nếu đầu vào là nums =[30, 11, 12, 13, 14, 15, 18, 17, 32], thì đầu ra sẽ là 7, như khi chúng ta loại bỏ 18 trong danh sách, chúng ta có thể nhận được [11, 12, 13, 14, 15, 17, 32] là danh sách con dài nhất, liền kề, tăng dần và độ dài của nó là 7.

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

  • n:=kích thước của nums

  • pre:=danh sách kích thước n và điền vào 1s

  • đối với tôi trong phạm vi từ 1 đến n - 1, hãy thực hiện

    • nếu nums [i]> nums [i - 1], thì

      • pre [i]:=pre [i - 1] + 1

  • đủ:=danh sách kích thước n và điền vào 1s

  • đối với tôi trong phạm vi n - 2 đến -1, giảm 1, thực hiện

    • nếu nums [i]

      • đủ [i]:=Suff [i + 1] + 1

  • ans:=giá trị lớn nhất của giá trị lớn nhất trước và tối đa của hậu quả

  • đối với tôi trong phạm vi từ 1 đến n - 1, hãy thực hiện

    • nếu nums [i - 1]

      • ans:=tối đa ans và (pre [i - 1] + Suff [i + 1])

  • trả lại ans

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

Ví dụ

class Solution:
   def solve(self, nums):
      n = len(nums)
      pre = [1] * n
      for i in range(1, n - 1):
         if nums[i] > nums[i - 1]:
            pre[i] = pre[i - 1] + 1
      suff = [1] * n
      for i in range(n - 2, -1, -1):
         if nums[i] < nums[i + 1]:
            suff[i] = suff[i + 1] + 1
               ans = max(max(pre), max(suff))
               for i in range(1, n - 1):
                  if nums[i - 1] < nums[i + 1]:
                     ans = max(ans, pre[i - 1] + suff[i + 1])
               return ans
ob = Solution()
nums = [30, 11, 12, 13, 14, 15, 18, 17, 32]
print(ob.solve(nums))

Đầu vào

[30, 11, 12, 13, 14, 15, 18, 17, 32]

Đầu ra

7