মান লিজিয়ে আমাদের একটি অ্যারে আছে points যাতে ২D প্লেনের কোঅর্ডিনেট পয়েন্টগুলো রয়েছে, সেগুলো x-ভ্যালু অনুযায়ী সর্টেড, যেখানে points[i] = (x_i, y_i) এবং x_i < x_j সব 1 <= i < j <= points এর জন্য। আরেকটি মান আছে k। আমাদের সমীকরণ y_i + y_j + |x_i - x_j| এর সর্বোচ্চ মান বের করতে হবে যেখানে |x_i - x_j| <= k এবং 1 <= i < j <= points।
যেমন, ইনপুট হলে points = [[2,4],[3,1],[6,11],[7,-9]] এবং k = 1, তবে আউটপুট হবে 6 কারণ প্রথম দুটি পয়েন্ট শর্ত |xi - xj| <= 1 পূরণ করে এবং সমীকরণের মান হয় 4 + 1 + |2 - 3| = 6। তৃতীয় ও চতুর্থ পয়েন্টও শর্ত পূরণ করে এবং মান দেয় 11 + (-9) + |6 - 7| = 3, তাই সর্বোচ্চ হল ৬।
সমাধানের ধাপসমূহ
left := 0, right := 1max_value := -infright < len(points)থাকা পর্যন্ত:(xl, yl) := points[left](xr, yr) := points[right]diff := |xr - xl|যদি
left == rightহয়, তবেright := right + 1অন্যথায় যদি
diff <= kহয়, তবে:m := yl + yr + diffmax_value := max(max_value, m)যদি
yl >= yr - diffহয়, তবেright := right + 1অন্যথায়,
left := left + 1
অন্যথায়,
left := left + 1
max_valueরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
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