日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 528. 按权重随机选择(前缀和+二分查找)

發(fā)布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 528. 按权重随机选择(前缀和+二分查找) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給定一個正整數(shù)數(shù)組 w ,其中 w[i] 代表下標 i 的權(quán)重(下標從 0 開始),請寫一個函數(shù) 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,因為數(shù)組中只有一個元素,所以唯一的選擇是返回下標 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 將被調(diào)用不超過 10000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/random-pick-with-weight
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

類似題目:
LeetCode 497. 非重疊矩形中的隨機點(前綴和+二分查找)

  • 計算前綴和權(quán)重
  • 隨機權(quán)值,二分查找,找到權(quán)值落在的區(qū)間點
class Solution {vector<int> w_presum;int total; public:Solution(vector<int>& w) {w_presum = w;for(int i = 1; i < w.size(); ++i)w_presum[i] += w_presum[i-1];total = w_presum.back();}int pickIndex() {int w = rand()%total + 1;int L = 0, R = w_presum.size()-1, mid;while(L <= R){mid = L+((R-L)>>1);if(w_presum[mid] < w)L = mid+1;else{if(mid==0 || w_presum[mid-1] < w)return mid;elseR = mid-1;}}return -1;} };

88 ms 39.3 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學習進步!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的LeetCode 528. 按权重随机选择(前缀和+二分查找)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。