【LeetCode 簡單題】109-供暖器
阿新 • • 發佈:2018-11-27
宣告:
今天是第109道題。設計一個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。
說明:
- 給出的房屋和供暖器的數目是非負數且不會超過 25000。
- 給出的房屋和供暖器的位置均是非負數且不會超過10^9。
- 只要房屋位於供暖器的半徑內(包括在邊緣上),它就可以得到供暖。
- 所有供暖器都遵循你的半徑標準,加熱的半徑也一樣。
示例 1:
輸入: [1,2,3],[2] 輸出: 1 解釋: 僅在位置2上有一個供暖器。如果我們將加熱半徑設為1,那麼所有房屋就都能得到供暖。示例 2:
輸入: [1,2,3,4],[1,4] 輸出: 1 解釋: 在位置1, 4上有兩個供暖器。我們需要將加熱半徑設為1,這樣所有房屋就都能得到供暖。
解法1。首先2個輸入的陣列都排序,然後遍歷每個house,對每個house計算距離其最近的供暖器同時記錄下這個供暖器的下標index供下一個house使用,因為下一個house不需要再前向比較其他供暖器了,肯定不會有距離更近的,然後不斷更新這個最小距離以獲取最大值,程式碼如下
執行用時: 96 ms, 在Heaters的Python提交中擊敗了88.68% 的使用者
class Solution(object): def findRadius(self, houses, heaters): """ :type houses: List[int] :type heaters: List[int] :rtype: int """ houses.sort() heaters.sort() index = 0 max_radius = 0 for h in houses: while index+1 < len(heaters) and abs(h-heaters[index+1]) <= abs(h-heaters[index]): index += 1 max_radius = max(max_radius,abs(h-heaters[index])) return max_radius
結尾
解法1:https://blog.csdn.net/liuxiao214/article/details/77985962