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

โปรแกรมหาความยาวของรายการย่อยที่มีความไม่เท่ากันสลับกันมากที่สุดใน Python

สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และต้องการหาความยาวของรายการย่อยที่ยาวที่สุดใน nums ที่ความสัมพันธ์ของความไม่เท่ากันระหว่างตัวเลขที่ติดกันแต่ละคู่สลับกันระหว่างการดำเนินการน้อยกว่า (<) และมากกว่า (>) ความไม่เท่ากันของคู่แรกอาจเป็นน้อยกว่าหรือมากกว่าก็ได้

ตัวอย่างเช่น หากอินพุตคือ nums = [1, 2, 6, 4, 5] ผลลัพธ์จะเป็น 4 เนื่องจากรายการย่อยที่มีความไม่เท่ากันสลับกันมากที่สุดคือ [2, 6, 4, 5] โดยที่ 2 < 6 > 4 < 5

ขั้นตอนการแก้ปัญหา

  1. กำหนดฟังก์ชัน get_direction() ที่รับพารามิเตอร์ a, b:
    • คืนค่า 0 หาก a เท่ากับ b
    • คืนค่า -1 หาก a < b
    • คืนค่า 1 หาก a > b
  2. หากขนาดของ nums น้อยกว่า 2 ให้คืนค่าขนาดของ nums
  3. กำหนดค่าเริ่มต้น: max_length = 1, cur_length = 1, last_direction = 0
  4. วนลูป 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
  5. คืนค่า 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