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

โปรแกรมค้นหาความยาวที่ยาวที่สุดเพิ่มขึ้นอย่างเคร่งครัดแล้วลดรายการย่อยใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums เราต้องหาความยาวของรายการย่อยที่ยาวที่สุด ซึ่ง (ความยาวขั้นต่ำ 3) ค่าของรายการนั้นเพิ่มขึ้นอย่างเคร่งครัดแล้วจึงลดลง

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[7, 1, 3, 5, 2, 0] เอาต์พุตจะเป็น 5 เนื่องจากรายการย่อยคือ [2, 4, 6, 3, 1] เพิ่มขึ้นอย่างเคร่งครัดแล้วลดลง .

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

  • i :=0, n :=ขนาดของ a, res :=-infinity
  • ในขณะที่ฉัน
  • st :=ฉัน
  • linc :=0, ldec :=0
  • ในขณะที่ฉัน
  • linc :=linc + 1
  • ผม :=ผม + 1
  • ในขณะที่ฉัน a[i + 1] ให้ทำ
    • ldec :=ldec + 1
    • ผม :=ผม + 1
  • ถ้า linc> 0 และ ldec> 0 แล้ว
    • res :=สูงสุดของ res และ (i - st + 1)
  • ในขณะที่ i
  • ผม :=ผม + 1
  • คืนค่า res ถ้า res>=0 มิฉะนั้น 0
  • ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    ตัวอย่าง

    class Solution:
       def solve(self, a):
          i, n, res = 0, len(a), float("-inf")
          while i < n - 2:
             st = i
             linc, ldec = 0, 0
             while i < n - 1 and a[i] < a[i + 1]:
                linc += 1
                i += 1
             while i < n - 1 and a[i] > a[i + 1]:
                ldec += 1
                i += 1
             if linc > 0 and ldec > 0:
                res = max(res, i - st + 1)
             while i < n - 1 and a[i] == a[i + 1]:
                i += 1
          return res if res >= 0 else 0
    ob = Solution()
    nums = [8, 2, 4, 6, 3, 1]
    print(ob.solve(nums))

    อินพุต

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

    ผลลัพธ์

    5