ภาพรวม
โจทย์นับจำนวนครั้งที่ลำดับตัวเลขเปลี่ยนทิศทาง (direction change) จากเพิ่มขึ้นเป็นลดลง หรือ ลดลงเป็นเพิ่มขึ้น
ตัวอย่าง
อินพุต: [2, 4, 10, 18, 6, 11, 13]
การเปลี่ยนทิศทาง:
- ดัชนี 3: 18 → 6 (เพิ่ม → ลด) Peak at 18
- ดัชนี 4: 6 → 11 (ลด → เพิ่ม) Valley at 6
รวม 2 ครั้ง
เงื่อนไข Peak/Valley
ที่ดัชนี i (1 ≤ i ≤ n-2):
- Peak:
nums[i-1] < nums[i] > nums[i+1] - Valley:
nums[i-1] > nums[i] < nums[i+1]
โค้ด Python
class Solution:
def solve(self, nums):
count = 0
for i in range(1, len(nums) - 1):
if nums[i-1] < nums[i] > nums[i+1] or nums[i-1] > nums[i] < nums[i+1]:
count += 1
return count
ob = Solution()
print(ob.solve([2, 4, 10, 18, 6, 11, 13]))
ข้อสังเกต
- ไม่นับจุดเริ่มต้นและจุดสิ้นสุด (ไม่มีเพื่อนบ้านครบ 2 ด้าน)
- ค่าที่เท่ากัน (
==) ไม่ถือเป็น peak/valley - เวลา O(n), พื้นที่ O(1)
ผลลัพธ์
2