ধরুন আমাদের সব ঘর গরম করার জন্য একটি নির্দিষ্ট উষ্ণ ব্যাসার্ধ সহ একটি স্ট্যান্ডার্ড হিটার ডিজাইন করতে হবে। এখন, আমরা একটি অনুভূমিক রেখায় ঘর এবং হিটারগুলির অবস্থান দিয়েছি, আমাদের হিটারগুলির সর্বনিম্ন ব্যাসার্ধ খুঁজে বের করতে হবে যাতে সমস্ত ঘরগুলি সেই হিটারগুলি দ্বারা আচ্ছাদিত হতে পারে। সুতরাং, আমরা আলাদাভাবে ঘর এবং হিটার সরবরাহ করব এবং আমাদের প্রত্যাশিত আউটপুট হবে হিটারের সর্বনিম্ন ব্যাসার্ধের মান।
সুতরাং, যদি ইনপুটটি [1,2,3,4],[1,4] এর মত হয়, তাহলে আউটপুট হবে 1 যেমন দুটি হিটার পজিশন 1 এবং 4 এ রাখা হয়েছিল। আমাদের ব্যাসার্ধ 1 ব্যবহার করতে হবে, তারপর সবগুলো ঘর গরম করা যেতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
তালিকা ঘর সাজান
-
তালিকা হিটারগুলি সাজান
-
res :=হাউস অ্যারের মতো আকারের একটি অ্যারে, এবং inf ব্যবহার করে এটি পূরণ করুন
-
আমি 0 থেকে বাড়ির আকারের মধ্যে, কর
-
h :=বাড়ি[i]
-
ind :=হিটারে h সন্নিবেশ করার জন্য সর্বাধিক সূচী বাম যাতে তালিকাটি সাজানো থাকে
-
যদি ind হিটারের আকারের সমান হয়, তাহলে
-
res[i] :=ন্যূনতম res[i], |h - হিটার[-1]|
-
-
অন্যথায় যখন ind 0 এর মত হয়, তখন
-
res[i] :=ন্যূনতম res[i], |h - হিটার[0]|
-
-
অন্যথায়,
-
res[i] :=ন্যূনতম res[i], |h - হিটার [Ind]| , |h - হিটার[ইন্ড-1]|
-
-
-
সর্বোচ্চ রিটার্ন করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
from bisect import bisect_left class Solution: def findRadius(self, houses, heaters): houses.sort() heaters.sort() res = [float('inf')]*len(houses) for i in range(len(houses)): h = houses[i] ind = bisect_left(heaters, h) if ind==len(heaters): res[i] = min(res[i], abs(h - heaters[-1])) elif ind == 0: res[i] = min(res[i], abs(h - heaters[0])) else: res[i] = min(res[i], abs(h - heaters[ind]), abs(h - heaters[ind-1])) return max(res) ob = Solution() print(ob.findRadius([1,2,3,4],[1,4]))
ইনপুট
[1,2,3,4],[1,4]
আউটপুট
1