ปัญหา
มี 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] ใช่)
ขั้นตอนการแก้ปัญหา
new := [True]*len(l)- สำหรับแต่ละ 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
- คืน
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]