ภาพรวม
ตรวจสอบว่าลิสต์ตัวเลข nums สามารถเรียงเป็นอนุกรมเลขคณิต (AP) ได้หรือไม่ โดยที่ผลต่างระหว่างตัวเลขติดกันทุกคู่ต้องเท่ากัน
ตัวอย่าง
nums = [9,1,17,5,13]
เรียงแล้ว: [1,5,9,13,17] → ผลต่างร่วม = 4 → เป็น AP → คืนค่า True
ขั้นตอนการแก้ปัญหา
- เรียงลิสต์
numsด้วยsorted() - ถ้าความยาว ≤ 1 ให้คืนค่า
True(ถือว่าเป็น AP) - คำนวณผลต่างร่วม
const = nums[1] - nums[0] - วนลูปตรวจสอบ
nums[i+1] - nums[i] == constสำหรับทุกi - ถ้ามีคู่ไหนไม่ตรง ให้คืนค่า
False - จบลูป ให้คืนค่า
True
ตัวอย่างโค้ด (Python)
def solve(nums):
nums = sorted(nums)
if len(nums) > 1:
const = nums[1] - nums[0]
else:
return True
for i in range(len(nums)-1):
if nums[i+1] - nums[i] != const:
return False
return True
nums = [9,1,17,5,13]
print(solve(nums))
อินพุต
[9,1,17,5,13]
เอาต์พุต
True
ความซับซ้อน
- เวลา: O(n log n) จากการเรียง
- พื้นที่: O(n) หรือ O(1) ถ้าเรียงแบบ in-place