給定乙個正整數陣列 w ,其中 w[i] 代表下標 i 的權重(下標從 0 開始),請寫乙個函式 pickindex ,它可以隨機地獲取下標 i,選取下標 i 的概率與 w[i] 成正比。
例如,對於 w = [1, 3],挑選下標 0 的概率為 1 / (1 + 3) = 0.25 (即,25%),而選取下標 1 的概率為 3 / (1 + 3) = 0.75(即,75%)。
也就是說,選取下標 i 的概率為 w[i] / sum(w) 。
示例 1:
輸入:["solution","pickindex"]
[[[1]],]
輸出:[null,0]
解釋:solution solution = new solution([1]);
solution.pickindex(); // 返回 0,因為陣列中只有乙個元素,所以唯一的選擇是返回下標 0。
示例 2:
輸入:["solution","pickindex","pickindex","pickindex","pickindex","pickindex"]
[[[1,3]],,,,,]
輸出:[null,1,1,1,1,0]
解釋:solution solution = new solution([1, 3]);
solution.pickindex(); // 返回 1,返回下標 1,返回該下標概率為 3/4 。
solution.pickindex(); // 返回 1
solution.pickindex(); // 返回 1
solution.pickindex(); // 返回 1
solution.pickindex(); // 返回 0,返回下標 0,返回該下標概率為 1/4 。
由於這是乙個隨機問題,允許多個答案,因此下列輸出都可以被認為是正確的:
[null,1,1,1,1,0]
[null,1,1,1,1,1]
[null,1,1,1,0,0]
[null,1,1,1,0,1]
[null,1,0,1,0,0]
......
諸若此類。
1 <= w.length <= 10000
1 <= w[i] <= 10^5
pickindex 將被呼叫不超過 10000 次
// 時間複雜度:o(n) 的預處理。priceindex 需要花費 o(log(n))的時間。
// 空間複雜度:o(n)
class
solution
}public
intpickindex()
return lo;}}
/** * your solution object will be instantiated and called as such:
* solution obj = new solution(w);
* int param_1 = obj.pickindex();
*/// spring cloud ribbon (客戶端負載均衡)策略中的 weightedresponsetimerule
// 此題可簡述為「按權重,看作多個區間,按區間寬度越大,概率越大」
// 在 ribbon 相關架構中,服務端給客戶端乙個服務列表,類似 map> 結構。若客戶端想呼叫 key = servicea,可選的具體服務端例項有 set的 ["/svc/a1", "/svc/a2", "/svc/a3"],由客戶端自行決定
// ribbon 作為客戶端負載均衡來幫助客戶端選擇去哪個具體服務例項(a1 / a2 / a3),希望雨露均沾,又希望別運氣不好抽到響應慢的伺服器,故有了一種根據權重的均衡策略
// 權重是通過定時統計最近一段時間內,a1 / a2 / a3 各自的訪問響應時間如何,如 a1: 10ms,a2: 20ms,a3: 40ms
// 下次再需要訪問 servicea 時,隨機乙個數 [0, 140],看落在哪個區間,就選那個例項
// rabbitmq 的 topic 交換器使用 trie 匹配
// mysql 中的 in 語法涉及二分演算法
528 按權重隨機選擇 C
先將數字累加,然後壓入陣列中,由此得到一系列的區間。只要我們產生乙個隨機數,看落在哪個子區間就行了。例如,輸入3,2,5 就表示產生0的可能性佔3份,產生1的可能性佔2份,產生2的可能性佔5份,於是產生乙個陣列 3,5,10 再隨機生成乙個數,落在 0,10 上,判斷該隨機數落在哪個子區間就可以產生...
中等 201 數字範圍按位與
leetcode201 給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5,7 輸出 4 示例 2 輸入 0,1 輸出 0 該題在於找出m和n的公共字首,在按n的位數往後面補齊0.m到n之間的數都有該字首,則按位與操作使得...
LeetCode 542 01 矩陣 中等
給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。兩個相鄰元素間的距離為 1 示例 1 輸入 0 0 0 0 1 0 0 0 0 輸出 0 0 0 0 1 0 0 0 0 示例 2 輸入 0 0 0 0 1 0 1 1 1 輸出 0 0 0 0 1 0 1 2 1 注意 給定矩陣...