मान लीजिए हमें सभी घरों को गर्म करने के लिए एक निश्चित गर्म त्रिज्या के साथ एक मानक हीटर डिजाइन करना है। अब, हमने क्षैतिज रेखा पर घरों और हीटरों की स्थिति दी है, हमें हीटरों की न्यूनतम त्रिज्या ज्ञात करनी है ताकि सभी घरों को उन हीटरों द्वारा कवर किया जा सके। इसलिए, हम अलग-अलग घर और हीटर उपलब्ध कराएंगे, और हमारा अपेक्षित आउटपुट हीटर का न्यूनतम त्रिज्या मानक होगा।
इसलिए, यदि इनपुट [1,2,3,4], [1,4] जैसा है, तो आउटपुट 1 होगा क्योंकि दो हीटरों को स्थिति 1 और 4 में रखा गया था। हमें त्रिज्या 1 का उपयोग करना होगा, फिर सभी घरों को गर्म किया जा सकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सूची घरों को क्रमबद्ध करें
-
सूची हीटरों को क्रमबद्ध करें
-
res :=घरों की सरणी के समान आकार की एक सरणी, और इसे inf का उपयोग करके भरें
-
मेरे लिए 0 से लेकर घरों के आकार तक के लिए, करें
-
ज :=मकान[i]
-
ind :=हीटर में h डालने के लिए सबसे अधिक इंडेक्स छोड़ दिया ताकि सूची क्रमबद्ध बनी रहे
-
अगर ind हीटर के आकार के समान है, तो
-
res[i] :=न्यूनतम रेस [i], |h - हीटर[-1]|
-
-
अन्यथा जब इंड 0 के समान हो, तब
-
रेस [i] :=न्यूनतम रेस [i], |h - हीटर[0]|
-
-
अन्यथा,
-
रेस [i]:=न्यूनतम रेस [i], | एच - हीटर [इंड] | , |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