1. 问题

给定一个权重数组w,w[i]表示下标i的权重,根据权重从数组中随机抽取下标。

2. 思路

这道题相当于 497. Random Point in Non-overlapping Rectangles的一个简化版。

(1)可以先依次对每个下标的权重累加存起来(相当于概率分布中的分布累积函数CDF,Cumulative Distribution Function)。

(2)从 [1, 总权重] 中随机取一个数n,根据这个数在多个累加权重之间寻找合适的位置,即可完成题目要求的随机采样。

(3)可以使用python的bisect_left方法,bisect_left的作用是对已排序数组,查找目标数值将会插入的位置并返回(但是不会插入),数值相同时返回靠左的位置。

init:时间复杂度O(n),空间复杂度O(n)

pickIndex:时间复杂度O(n),空间复杂度O(1)

3. 代码

import random
import bisect class Solution(object):
def __init__(self, w):
"""
:type w: List[int]
"""
self.accumulate = []
sums = 0
for weight in w:
sums += weight
self.accumulate.append(sums) def pickIndex(self):
"""
:rtype: int
"""
n = random.randint(1,self.accumulate[-1])
i = bisect.bisect_left(self.accumulate, n)
return i # Your Solution object will be instantiated and called as such:
# obj = Solution(w)
# param_1 = obj.pickIndex()

4. 类似题目

497. Random Point in Non-overlapping Rectangles

最新文章

  1. python学习笔记(一)
  2. OpenCV从入门到放弃系列之——图像的基本操作
  3. ServiceStack.Redis之IRedisClient<第三篇>
  4. FreeCodeCamp 高级算法(个人向)
  5. 店商互联(北京)科技发展有限公司DS365.com
  6. css背景图片定位练习(二): background-position的百分比
  7. vim命令收集(持续中)
  8. 【OpenGL】glFinish()和glFlush()函数详解-[转]
  9. sql server 2008数据复制
  10. 中国 省会 地级市 经纬度 city array
  11. docker 容器日志集中 ELK + filebeat
  12. 【Django】django 的request和response(转)
  13. Caffe-5.2-(GPU完整流程)训练(依据googlenet微调)
  14. iOS 从应用程序跳转到评价界面
  15. BIO, NIO 和 Epoll (转载)
  16. Luogu P3165 [CQOI2014]排序机械臂
  17. Linux 安装python3.7.0
  18. 【警告】WARN: Establishing SSL connection without server's identity verification is not recommended.
  19. Extjs event domain 研究
  20. nginx安装以及常用配置

热门文章

  1. Django里面是文件静态化的方法
  2. js里面函数的内部属性
  3. 判断页面中的js方法是否存在,存在就调用它,不存在则忽略
  4. HTTP/2笔记之连接建立
  5. 经验之道:最有效的iOS内存泄漏检测
  6. Android 动画fillAfter和fillBefore
  7. JQuery中$.ajax()方法参数详解 转载
  8. [黑金原创教程] FPGA那些事儿《设计篇 III》- 图像处理前夕·再续
  9. gradle多项目 svn依赖
  10. 善用缓存提高你的Spring工程效率