สมมติว่าเรามีรายการหมายเลขที่เรียกว่า 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