ปัญหา
ให้อาร์เรย์ nums (ไม่เรียง อาจมีลบ) ตรวจสอบว่ามีค่าติดกัน (consecutive integers) หรือไม่ โดย O(n) time, O(1) space
ตัวอย่าง
nums = [-3, 5, 1, -2, -1, 0, 2, 4, 3] → เรียงได้ -3,-2,-1,0,1,2,3,4,5 → True
แนวคิด (คณิตศาสตร์)
ถ้าค่าติดกัน → ค่าต่ำสุด = min, ค่าสูงสุด = min + n - 1
ผลรวมควรเป็น n/2 * (2*min + n - 1) (Arithmetic Progression)
ถ้า sum จริง = sum ทฤษฎี → เป็น consecutive (สมมติไม่มีซ้ำ)
โค้ดตัวอย่าง
def solve(nums):
n = len(nums)
min_val = min(nums)
expected_sum = n * (2 * min_val + n - 1) // 2
actual_sum = sum(nums)
return expected_sum == actual_sum
print(solve([-3, 5, 1, -2, -1, 0, 2, 4, 3])) # True
ข้อจำกัด
วิธีนี้สมมติว่า ไม่มีค่าซ้ำ ถ้ามีซ้ำ อาจ false positive (เช่น [1,1,3] sum=5, expected=6 → False แต่ [0,0,3] sum=3, expected=3 → True ผิด)
อินพุต / เอาต์พุต
Input: [-3, 5, 1, -2, -1, 0, 2, 4, 3] Output: True