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

โปรแกรมตรวจสอบว่าย่อยอาร์เรย์จัดเรียงเป็นลำดับเลขคณิตได้หรือไม่ใน Python

ปัญหา

มี nums และ query l, r ตรวจสอบว่า nums[l[i]..r[i]] จัดเรียงใหม่ได้เป็นลำดับเลขคณิตหรือไม่ (ความต่างติดกันคงที่)

ตัวอย่าง

nums=[6,8,7,11,5,9], l=[0,0,2], r=[2,3,5] → [True, False, True] ([6,8,7]→[6,7,8] ใช่, [6,8,7,11] ไม่ใช่, [7,11,5,9]→[5,7,9,11] ใช่)

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

  1. new := [True]*len(l)
  2. สำหรับแต่ละ query i:
    • data := sorted(nums[l[i]:r[i]+1])
    • d := [data[j+1]-data[j] for j in range(len(data)-1)]
    • d := set(d)
    • ถ้า len(d) != 1: new[i] = False
  3. คืน new

การนำไปใช้งาน (Python)

def solve(nums, l, r):
    new = [True] * len(l)
    for i in range(len(l)):
        data = nums[l[i]:r[i]+1]
        data.sort()
        d = []
        for j in range(len(data) - 1):
            d.append(data[j+1] - data[j])
        d = list(set(d))
        if len(d) != 1:
            new[i] = False
    return new

nums = [6,8,7,11,5,9]
l = [0,0,2]
r = [2,3,5]
print(solve(nums, l, r))

อินพุต

[6,8,7,11,5,9], [0,0,2], [2,3,5]

เอาต์พุต

[True, False, True]