码迷,mamicode.com
首页 > 其他好文 > 详细

528. Random Pick with Weight

时间:2018-11-08 18:17:49      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:null   function   public   art   ase   []   log   tar   list   

Given an array w of positive integers, where w[i] describes the weight of index i, write a function pickIndex which randomly picks an index in proportion to its weight.
Note:
1. 1 <= w.length <= 10000
2. 1 <= w[i] <= 10^5
3. pickIndex will be called at most 10000 times.
Example 1:
Input: 
["Solution","pickIndex"]
[[[1]],[]]
Output: [null,0]
Example 2:
Input: 
["Solution","pickIndex","pickIndex","pickIndex","pickIndex","pickIndex"]
[[[1,3]],[],[],[],[],[]]
Output: [null,0,1,1,1,0]
Explanation of Input Syntax:
The input is two lists: the subroutines called and their arguments. Solution‘s constructor has one argument, the array w. pickIndex has no arguments. Arguments are always wrapped with a list, even if there aren‘t any.


https://blog.csdn.net/fuxuemingzhu/article/details/81807215


// In the case w = [1, 99] , your pickIndex() should return index 1 for 99% and index 0 for 1%.
    
//     index 0 has weight 1 
//     index 1 has weight 99 
//     the total weight is 100, so index 0 has 1/100, and index 1 has 99/100
//     we can use bianry search for this problem 
    
    
    

// not my code 

    
    
class Solution {

    List<Integer> psum = new ArrayList<>();
    int tot = 0;
    Random rand = new Random();

    public Solution(int[] w) {
        for (int x : w) {
            tot += x;
            psum.add(tot);
        }
    }

    public int pickIndex() {
        int targ = rand.nextInt(tot);

        int lo = 0;
        int hi = psum.size() - 1;
        while (lo != hi) {
            int mid = (lo + hi) / 2;
            if (targ >= psum.get(mid)) lo = mid + 1;
            else hi = mid;
        }
        return lo;
    }
}  


https://leetcode.com/problems/random-pick-with-weight/solution/

 

528. Random Pick with Weight

标签:null   function   public   art   ase   []   log   tar   list   

原文地址:https://www.cnblogs.com/tobeabetterpig/p/9929771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!