สมมติว่าเรามีรายการของ mumbers ที่เรียกว่า nums และหาความยาวของ innum ย่อยที่ยาวที่สุด ซึ่งความสัมพันธ์ที่เท่าเทียมกันระหว่างทุกตัวเลขที่ต่อเนื่องกันจะเปลี่ยนไปหรือระหว่างการดำเนินการที่น้อยกว่าและมากกว่า อสมการสองจำนวนแรกอาจน้อยกว่าหรือมากกว่า
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[1, 2, 6, 4, 5] ผลลัพธ์จะเป็น 4 เนื่องจากรายการย่อยที่ไม่เท่ากันสลับกันที่ยาวที่สุดคือ [2, 6, 4, 5] เป็น 2 <6> 4 <5.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน get_direction() นี่จะใช้เวลา a, b
-
คืนค่า 0 ถ้า a เหมือนกับ b มิฉะนั้น -1 ถ้า a
-
-
ถ้าขนาดของ nums <2 แล้ว
-
ขนาดส่งคืนของ nums
-
-
max_length :=1, cur_length :=1, last_direction :=0
-
สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 1 ทำ
-
ทิศทาง :=get_direction(nums[i], nums[i + 1])
-
ถ้าทิศทางเหมือนกับ 0 แล้ว
-
cur_length :=1
-
-
มิฉะนั้นเมื่อทิศทางเหมือนกับ last_direction แล้ว
-
cur_length :=2
-
-
มิฉะนั้น
-
cur_length :=cur_length + 1
-
-
max_length :=สูงสุดของ max_length และ cur_length
-
last_direction :=ทิศทาง
-
-
คืนค่า max_length
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น−
ตัวอย่าง
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))
อินพุต
[1, 2, 6, 4, 5]
ผลลัพธ์
4