leetcode.398.隨機數索引

題目描述

給定一個可能含有重複元素的整數數組,要求隨機輸出給定的數字的索引。 您能夠假設給定的數字必定存在於數組中。git

注意:github

數組大小可能很是大。 使用太多額外空間的解決方案將不會經過測試。golang

示例:面試

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 398. 隨機數索引算法

本文爲原創文章,轉載註明出處,歡迎掃碼關注公衆號 樓蘭 或者網站 https://lovecoding.club,第一時間看後續精彩文章,以爲好的話,順手分享到朋友圈吧,感謝支持。

image

相關文章
相關標籤/搜索