内容简介:给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。
题目描述
给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。
注意:
数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。
示例:
int[] nums = new int[] {1,2,3,3,3}; Solution solution = new Solution(nums); // pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。 solution.pick(3); // pick(1) 应该返回 0。因为只有nums[0]等于1。 solution.pick(1);
代码实现
// Solution defines a structure type Solution struct { nums []int } // Constructor constructs a object func Constructor(nums []int) Solution { return Solution{ nums: nums, } } // Pick returns index number that target at nums Randomly. func (s *Solution) Pick(target int) int { res := []int{} for i, v := range s.nums { if v == target { res = append(res, i) } } rand.Seed(time.Now().UnixNano()) return res[rand.Intn(len(res))] }
思路
- 数组大小可能非常大,尽量不使用太多额外空间,所以Solution对象直接用nums字段
- 尝试过在Constructor()只遍历一遍nums,创建map存储nums中每个值的索引,但是Leetcode测试一直时间超过限制,可能是因为使用了额外内存吧
- Pick()中遍历nums,找到target的索引到res中,rand随机选一个索引,返回
GitHub
- 戳这里看源码
- 各种数据结构及算法实现, LeetCode解题思路及答案
- 大厂面试题汇总及答案解析
参考资料
本文为原创文章,转载注明出处,欢迎扫码关注公众号 楼兰
或者网站 https://lovecoding.club
,第一时间看后续精彩文章,觉得好的话,顺手分享到朋友圈吧,感谢支持。
以上所述就是小编给大家介绍的《leetcode.398.随机数索引》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!