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

ตรวจสอบว่าอาร์เรย์มีค่าติดกัน (Consecutive) O(n) time O(1) space รองรับลบ ใน Python


ปัญหา

ให้อาร์เรย์ 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