1. 程式人生 > >【LeetCode 簡單題】109-供暖器

【LeetCode 簡單題】109-供暖器

宣告:

今天是第109道題。設計一個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。

說明:

  1. 給出的房屋和供暖器的數目是非負數且不會超過 25000。
  2. 給出的房屋和供暖器的位置均是非負數且不會超過10^9。
  3. 只要房屋位於供暖器的半徑內(包括在邊緣上),它就可以得到供暖。
  4. 所有供暖器都遵循你的半徑標準,加熱的半徑也一樣。

示例 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