Java实现 LeetCode 528 按权重随机选择(TreeMap)

摘要:
528.根据权重随机选择一个正整数数组w,其中w[i]表示位置i的权重。请写一个函数pickIndex,它可以随机获得位置i,选择位置i的概率与w[i]成正比。注:1˂=w长度˂=100001˂=w[i]˂=10^5pickIndex将被调用不超过10000次示例1:输入:[“Solution”,“pickIndex”][[1]],[]]输出:[null,0]示例2:输入:“Solution“,“pick Index”,“pickIndex”,[]]输出:[null,0,1,1,0]输入语法描述:输入是两个列表:调用成员函数的名称和调用参数。

528. 按权重随机选择

给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比。

说明:

1 <= w.length <= 10000
1 <= w[i] <= 10^5
pickIndex 将被调用不超过 10000 次
示例1:

输入:
[“Solution”,“pickIndex”]
[[[1]],[]]
输出: [null,0]
示例2:

输入:
[“Solution”,“pickIndex”,“pickIndex”,“pickIndex”,“pickIndex”,“pickIndex”]
[[[1,3]],[],[],[],[],[]]
输出: [null,0,1,1,1,0]
输入语法说明:

输入是两个列表:调用成员函数名和调用的参数。Solution 的构造函数有一个参数,即数组 w。pickIndex 没有参数。输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。

PS:
偷个懒

class Solution {

     int sum=0;
    private TreeMap<int[], Integer> range = new TreeMap<>(new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            // 区间内
            if (o1[0] >= o2[0] && o1[1] < o2[1]) {
                return 0;
            // 小于,左区间
            } else if (o1[1] <= o2[0]) {
                return -1;

            // 大于
            } else {
                return 1;
            }
        }
    });

    public Solution(int[] w) {
         int start;
        for(int i=0;i<w.length;i++) {
            start = sum;
            sum += w[i];
            range.put(new int[]{start, sum}, i);
        }
    }
    
    public int pickIndex() {
        int index = (int)(Math.random() * sum);
        if (range.get(new int[]{index, index}) == null) {
            return 0;
        }else{
            return range.get(new int[]{index, index});
        }
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(w);
 * int param_1 = obj.pickIndex();
 */

免责声明:文章转载自《Java实现 LeetCode 528 按权重随机选择(TreeMap)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇.NET 环境中使用RabbitMQ(转)SpringBoot---基本了解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

112.前端css优先级

本章用来探讨并且尝试一些 css 那些选择符号。 时光飞逝,毕业已经两年。在前端这个领域,也断断续续地学了四年,感觉自己还不如一个踏踏实实地学了一年的前端。 在此,也提出一些这些年的感想。 1、不要因为觉得学了就会忘记,就不去学习。 有基础、无基础的重新学习,总是不一样的。有轮廓的时候,对一件事物有大概的轮廓,是很重要的。 2、犹豫是很浪费时间的。...

VGG16学习笔记

摘要 本文对图片分类任务中经典的深度学习模型VGG16进行了简要介绍,分析了其结构,并讨论了其优缺点。调用Keras中已有的VGG16模型测试其分类性能,结果表明VGG16对三幅测试图片均能正确分类。 前言 VGG是由Simonyan 和Zisserman在文献《Very Deep Convolutional Networks for Large Scal...

智能手机跑大规模神经网络的主要策略

计算机具有高储量的硬盘和强大的CPU和GPU。但是智能手机却没有,为了弥补这个缺陷,我们需要技巧来让智能手机高效地运行深度学习应用程序。 介绍 深度学习是一个令人难以置信的灵活且强大的技术,但运行的神经网络可以在计算方面需要非常大的电力,且对磁盘空间也有要求。这通常不是云空间能够解决的问题,一般都需要大硬盘服务器上运行驱动器和多个GPU模块。 不幸的是,...

论文阅读笔记(七十二)【ICMR2020】:Compact Network Training for Person ReID

Introduction 对HA-CNN的改进版。 Methods (1) 训练策略: ① Weighted triplet loss with Soft margin: 最初的triplet loss为: Batch-hard triplet loss选择了难样本对进行损失计算: batch-hard的缺点是:对异常样本敏感,硬选择策略可能会丢失重要...

network ---边赋予权重

有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组[u,v,w]作为参数,其中u是起点,v是终点,w是权重。例如:G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])添加0-1和1-2两条边,权重分别是3.0和7.5。如果想读取权重,可以使用get...

CSS入门

CSS的语法 选择器{属性1:属性值1;属性2:属性值2;} CSS样式表 样式表就是设置CSS的地方 1.内部样式表(style标签) <style> CSS语句 </style> 2.内联样式表(style属性) <div style="CSS语句"></div> 3.外部样式表(link标签设置) 3....