九章演算法 微軟面試題 加熱器

2021-10-22 13:47:50 字數 1006 閱讀 9534

描述

冬天來啦!你的任務是設計出乙個具有固定加熱半徑的加熱器,使得所有房屋在這個冬天不至於太冷。

現在你能夠獲知所有房屋和加熱器所處的位置,它們均分布在一條水平線中。你需要找出最小的加熱半徑使得所有房屋都處在至少乙個加熱器的加熱範圍內。

所以,你的輸入將會是所有房屋和加熱器所處的位置,期望輸出為加熱器最小的加熱半徑。

房屋和加熱器的數目均為非負整數,並且它們不會超過25000。

房屋和加熱器的位置均為非負整數,並且它們不會超過10^9。

只要一間房屋位於加熱器的加熱半徑內(包括邊界),它就會被加熱。

所有加熱器的加熱半徑相同。

樣例1

輸入:[1,2,3],[2]

輸出:1

說明:唯一的乙個加熱器被放在2的位置,那麼只要加熱半徑為1,就能覆蓋到所有房屋了。

樣例2

輸入:[1,2,3,4],[1,4]

輸出:1

說明:兩個加熱器分別位於1和4,只需要加熱半徑為1,就能加熱所有房屋了。

先對於加熱器陣列排序。 對於每個房屋i,在加熱器陣列裡使用二分查詢找到距離房屋i最近的加熱器的位置,最後的答案為所有房屋答案的最大值。

public class solution 

int leftdist = index - 1 >= 0 ? house - heaters[index - 1] : integer.max_value;

int rightdist = index < heaters.length ? heaters[index] - house : integer.max_value;

result = math.max(result, math.min(leftdist, rightdist));

}return result;

}}

更多題解參考

九章演算法 微軟面試題 公平索引

現在給你兩個長度均為n的整數陣列 a 和 b。當 a 0 a k 1 a k a n 1 b 0 b k 1 和 b k b n 1 四個和值大小相等時,稱索引k是乙個公平索引。也就是說,索引k 可以使得a,b 兩個陣列被分成兩個非空陣列,這四個子陣列的和值相等。例如,陣列a 4,1,0,3 b 2...

九章演算法 微軟面試題 騎士撥號器

西洋棋中的騎士可以按下圖所示進行移動 每當它落在乙個鍵上 包括騎士的初始位置 都會呼出鍵所對應的數字,總共按下n位數字。你能用這種方式呼出多少個不同的號碼?因為答案可能很大,所以輸出答案模 10 9 7。1 n 5000 樣例 1 輸入 1 輸出 10 說明 答案可能是0,1,2,3,9,樣例 2 ...

九章演算法 蘇州微軟面試題 程式檢查

描述 有一種程式語言,只有以下五種命令,每種命令最多有兩個引數,請檢查給定的程式是否可能無限迴圈。這些命令分別是 label 宣告乙個標籤,引數是乙個字串,且每個標籤只宣告一次。goto 跳轉到乙個標籤,並從標籤處開始按順序執行程式。halt 停機,程式終止。gotorand 隨機跳轉到兩個標籤中的...