สมมติว่าเรามีรายการหมายเลขที่เรียกว่า 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
- ldec :=ldec + 1
- ผม :=ผม + 1
- res :=สูงสุดของ res และ (i - st + 1)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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