ধরুন nums একটি লিস্ট যেটি ১-ডাইমেনশনাল লাইনে বাড়ি গুলোর পজিশন নির্দেশ করে। আমাদের ৩টি স্ট্রিট লাইট আছে যেগুলো লাইনের যেকোনো জায়গায় রাখা যায়। একটি লাইট যদি পজিশন x-এ থাকে তবে সেটি [x-r, x+r] রেঞ্জের সব বাড়ি আলোকিত করে। সব বাড়ি আলোকিত করতে ন্যূনতম r বের করতে হবে।
উদাহরণস্বরূপ, nums = [4,5,6,7] হলে আউটপুট হবে 0.5, কারণ ল্যাম্পগুলো 4.5, 5.5, 6.5-এ রাখলে r = 0.5-এ সব ৪টি বাড়ি আলোকিত হয়।
সমাধানের ধাপসমূহ
valid()ফাংশন ডিফাইন করুন যাrনেয়last_location := nums[0] + rcount := 1i = 0 থেকে nums-এর আকার-১পর্যন্ত লুপ:val := nums[i]- যদি
val - last_location > rহয়:count := count + 1last_location := val + r
count <= 3হলেTrueরিটার্ন করুন, অন্যথায়False- মূল মেথড থেকে:
numsসর্ট করুনleft := 0, right := nums[-1], res := inf, itr := 0while left <= right এবং itr < 20:mid := left + (right - left) / 2- যদি
valid(mid)true হয়:res := min(res, mid)right := mid
- অন্যথায়:
left := miditr := itr + 1
resরিটার্ন করুন
উদাহরণ
class Solution:
def solve(self, nums):
def valid(r):
last_location = nums[0] + r
count = 1
for i in range(len(nums)):
val = nums[i]
if val - last_location > r:
count += 1
last_location = val + r
return count <= 3
nums.sort()
left = 0
right = nums[-1]
res = float("inf")
itr = 0
while left <= right and itr < 20:
mid = left + (right - left) / 2
if valid(mid):
res = min(res, mid)
right = mid
else:
left = mid
itr += 1
return res
ob = Solution()
nums = [4,5,6,7]
print(ob.solve(nums))
ইনপুট
[4,5,6,7]
আউটপুট
0.5