python题目集索引_398.leetcode题目讲解(Python):随机数索引(Random Pick Index)

题目

题目

解题思路

这道题比较简单,有两种解题思路:

解法一

遍历nums,记录索引位置,然后通过random.sample() 返回一个结果。(beats 50%)

解法二

计算目标在nums中的个数 e,然后通过random.randint(1, e) 随机选出“第i个”目标,然后在nums列表中顺序 “数数”,数到“第i个”目标就返回其索引。(beats 100%)

参考代码

'''

@auther: Jedi.L

@Date: Wed, May 8, 2019 11:11

@Email: xiangyangan@gmail.com

@Blog: www.tundrazone.com

'''

import random

# beats 100%

class Solution1:

def __init__(self, nums):

self.nums = nums

def pick(self, target):

e = self.nums.count(target)

# ranodom select the i-th object

i = random.randint(1, e)

# count 1 to i

for j in range(len(self.nums)):

if self.nums[j] == target:

i = i - 1

if i = 0:

return j

# beats 50%

class Solution2:

def __init__(self, nums):

self.nums = nums

def pick(self, target):

candid =[]

for i in range(len(self.nums)):

if self.nums[i] == target:

candid.append(i)

return random.sample(candid, 1)

我的GitHub : GitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值