Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

นับการเปลี่ยนทิศทางของลำดับตัวเลขใน Python

ภาพรวม

โจทย์นับจำนวนครั้งที่ลำดับตัวเลขเปลี่ยนทิศทาง (direction change) จากเพิ่มขึ้นเป็นลดลง หรือ ลดลงเป็นเพิ่มขึ้น

ตัวอย่าง

อินพุต: [2, 4, 10, 18, 6, 11, 13]

การเปลี่ยนทิศทาง:

  1. ดัชนี 3: 18 → 6 (เพิ่ม → ลด) Peak at 18
  2. ดัชนี 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