前言
持续更新了
正文
问题来源
本问题来自leetcode上的398题。
问题描述
给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。
示例 1:
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);
分析:
type Solution struct {
M map[int]*[]int
}
func Constructor(nums []int) Solution {
m := make(map[int]*[]int)
for i, v := range nums {
sp, ok := m[v]
if ok {
*sp = append(*sp, i)
} else {
sp = new([]int)
m[v] = sp // 这句没写导致一直运行报使用非法指针
*sp = append(*sp, i)
}
}
return Solution{m}
}
func (this *Solution) Pick(target int) int {
rand.Seed(time.Now().UnixNano())
a := this.M[target]
return (*a)[rand.Intn(len(*a))]
}
总结:
勤思考。
结语
不管怎么样好好加油。