Giả sử chúng ta có một mảng được gọi là các điểm chứa các điểm tọa độ trên mặt phẳng 2D, chúng được sắp xếp theo các giá trị x, trong đó các điểm [i] =(x_i, y_i) nên x_i
Vì vậy, nếu đầu vào giống như điểm =[[2,4], [3,1], [6,11], [7, -9]] k =1, thì đầu ra sẽ là 6 vì hai điểm đầu tiên thỏa mãn điều kiện | xi - xj | <=1 bây giờ nếu chúng ta tính phương trình chúng ta nhận được 4+ 1 + | 2 - 3 | =6. Điểm thứ ba và thứ tư cũng thỏa mãn điều kiện và trả về giá trị 11 + -9 + | 6 - 7 | =3, vì vậy tối đa là 6.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
left:=0, right:=1
max_value:=-inf
trong khi bên phải
(xl, yl):=điểm [trái]
(xr, yr):=điểm [phải]
khác:=| xr - xl |
nếu bên trái giống bên phải, thì
right:=right + 1
ngược lại khi diff <=k thì
m:=yl + yr + diff
max_value:=tối đa max_value và m
nếu yl> =yr - diff thì
right:=right + 1
nếu không,
left:=left + 1
nếu không,
left:=left + 1
trả về max_value
Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn
Ví dụ
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))
Đầu vào
[[2,4],[3,1],[6,11],[7,-9]], 1
Đầu ra
6