ปัญหา
มีอาร์เรย์ points เก็บพิกัด (x_i, y_i) เรียงตาม x เพิ่มขึ้น และค่า k หาค่าสูงสุดของ y_i + y_j + |x_i - x_j| โดยที่ |x_i - x_j| <= k และ i < j
ตัวอย่าง
points = [[2,4],[3,1],[6,11],[7,-9]], k = 1 → ผลลัพธ์ 6 เพราะคู่แรกให้ 4+1+|2-3|=6, คู่ที่สาม-สี่ให้ 11+(-9)+|6-7|=3
ขั้นตอนการแก้ปัญหา
left := 0, right := 1, max_value := -inf- بينما
right < len(points):(xl, yl) := points[left], (xr, yr) := points[right]diff := |xr - xl|- ถ้า
left == right:right += 1 - มิฉะนั้นถ้า
diff <= k:m := yl + yr + diffmax_value := max(max_value, m)- ถ้า
yl >= yr - diff:right += 1มิฉะนั้น:left += 1
- มิฉะนั้น:
left += 1
- คืน
max_value
การนำไปใช้งาน (Python)
def solve(points, k):
left, right = 0, 1
max_value = float('-inf')
while right < len(points):
xl, yl = points[left]
xr, yr = points[right]
diff = abs(xr - xl)
if left == right:
right += 1
elif diff <= k:
m = yl + yr + diff
max_value = max(max_value, m)
if yl >= yr - diff:
right += 1
else:
left += 1
else:
left += 1
return max_value
points = [[2,4],[3,1],[6,11],[7,-9]]
k = 1
print(solve(points, k))
อินพุต
[[2,4],[3,1],[6,11],[7,-9]], 1
เอาต์พุต
6