每日一题——随机数索引

简介: 每日一题——随机数索引

398. 随机数索引

题目描述:

给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。

(target 是 nums 中的一个整数)

实现 Solution 类:

Solution(int[] nums) 用数组 nums 初始化对象。

int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当相等。

示例:

输入

[“Solution”, “pick”, “pick”, “pick”]

[[[1, 2, 3, 3, 3]], [3], [1], [3]]

输出

[null, 4, 0, 2]

解释

Solution solution = new Solution([1, 2, 3, 3, 3]);

solution.pick(3); // 随机返回索引 2, 3 或者 4 之一。每个索引的返回概率应该相等。

solution.pick(1); // 返回 0 。因为只有 nums[0] 等于 1 。

solution.pick(3); // 随机返回索引 2, 3 或者 4 之一。每个索引的返回概率应该相等。

题解:

type Solution struct {
  nums []int
}
func Constructor(nums []int) Solution {
  var solution Solution
  solution.nums = make([]int,len(nums))
  copy(solution.nums, nums)
  return solution
}
func (p *Solution) Pick(target int) int {
  transition := make([]int, 0)
  // 遍历切片,如果nums[i] = target ,将对应下标追加到切片中
  for i, v := range p.nums {
    if v == target {
      transition = append(transition, i)
    }
  }
  // 如果只有一个匹配的,直接返回其下标即可
  if len(transition)==1 {
    return transition[0]
  }
  // 如果有多个匹配的,
  // 通过rand.Intn(n): 生成[0,n)的随机数, 随机返回即可
  return transition[rand.Intn(len(transition))]
}

提交结果:

相关文章
|
API
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
41 0
|
6月前
|
索引
力扣随机一题 6/26 哈希表 数组 思维
力扣随机一题 6/26 哈希表 数组 思维
39 0
|
6月前
力扣随机一题 哈希表 排序 数组
力扣随机一题 哈希表 排序 数组
35 1
|
7月前
|
算法 C++
【牛客-算法】NC61 两数之和(哈希表的运用,C++)
前言 🔥 该专栏作为算法题笔记,记录算法的思路、遇到的问题,以及能跑的代码,持续更新中! 🔥 推荐一款面试、刷题神器牛客网:👉开始刷题学习👈
254 1
|
7月前
【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表
【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表
40 0
|
7月前
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
43 0
|
Serverless 索引
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(上)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和
72 0
【LeetCode36】有效的数独(哈希表)
【LeetCode36】有效的数独(哈希表)
44 0
|
算法 索引 Cloud Native
【刷题日记】398. 随机数索引
本次刷题日记的第 43 篇,力扣题为:398. 随机数索引 ,中等