สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และต้องการหาความยาวของรายการย่อยที่ยาวที่สุดใน nums ที่ความสัมพันธ์ของความไม่เท่ากันระหว่างตัวเลขที่ติดกันแต่ละคู่สลับกันระหว่างการดำเนินการน้อยกว่า (<) และมากกว่า (>) ความไม่เท่ากันของคู่แรกอาจเป็นน้อยกว่าหรือมากกว่าก็ได้
ตัวอย่างเช่น หากอินพุตคือ nums = [1, 2, 6, 4, 5] ผลลัพธ์จะเป็น 4 เนื่องจากรายการย่อยที่มีความไม่เท่ากันสลับกันมากที่สุดคือ [2, 6, 4, 5] โดยที่ 2 < 6 > 4 < 5
ขั้นตอนการแก้ปัญหา
- กำหนดฟังก์ชัน
get_direction()ที่รับพารามิเตอร์a,b:- คืนค่า 0 หาก
aเท่ากับb - คืนค่า -1 หาก
a < b - คืนค่า 1 หาก
a > b
- คืนค่า 0 หาก
- หากขนาดของ
numsน้อยกว่า 2 ให้คืนค่าขนาดของnums - กำหนดค่าเริ่มต้น:
max_length = 1,cur_length = 1,last_direction = 0 - วนลูป
iจาก 0 ถึงlen(nums) - 2:direction = get_direction(nums[i], nums[i + 1])- หาก
direction == 0ให้cur_length = 1 - หาก
direction == last_directionให้cur_length = 2 - มิฉะนั้น ให้
cur_length += 1 max_length = max(max_length, cur_length)last_direction = direction
- คืนค่า
max_length
ตัวอย่างโค้ด Python
class Solution:
def solve(self, nums):
if len(nums) < 2:
return len(nums)
def get_direction(a, b):
return 0 if a == b else -1 if a < b else 1
max_length = 1
cur_length = 1
last_direction = 0
for i in range(len(nums) - 1):
direction = get_direction(nums[i], nums[i + 1])
if direction == 0:
cur_length = 1
elif direction == last_direction:
cur_length = 2
else:
cur_length += 1
max_length = max(max_length, cur_length)
last_direction = direction
return max_length
ob = Solution()
nums = [1, 2, 6, 4, 5]
print(ob.solve(nums)) # Output: 4
อินพุต
[1, 2, 6, 4, 5]
เอาต์พุต
4