398 隨機數索引

2021-10-08 15:48:53 字數 702 閱讀 2382

題目描述:

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

注意:

陣列大小可能非常大。 使用太多額外空間的解決方案將不會通過測試。

示例:

int nums = new int ;

solution solution = new solution(nums);

// pick(3) 應該返回索引 2,3 或者 4。每個索引的返回概率應該相等。

solution.pick(3);

// pick(1) 應該返回 0。因為只有nums[0]等於1。

solution.pick(1);

方法1:蓄水池演算法

主要思路:

(1)假設當前正要讀取第n個資料,則我們以1/n的概率留下該資料,否則留下前n-1個資料中的乙個,既保留之前的資料的概率為 (n-1)/n。

(2)或者說當遇到第 i 個元素時,應該有 1/i 的 概率選擇該元素, 1-1/i 的概率保持原有的選擇。

class solution

int pick

(int target)}}

return res;}}

;

Leetcode 398 隨機數索引

給定乙個可能含有重複元素的整數陣列,要求隨機輸出給定的數字的索引。您可以假設給定的數字一定存在於陣列中。注意 陣列大小可能非常大。使用太多額外空間的解決方案將不會通過測試。示例 int nums new int solution solution new solution nums pick 3 應...

LeetCode 398 隨機數索引

給定乙個可能含有重複元素的整數陣列,要求隨機輸出給定的數字的索引。您可以假設給定的數字一定存在於陣列中。注意 陣列大小可能非常大。使用太多額外空間的解決方案將不會通過測試。示例 int nums new int solution solution new solution nums pick 3 應...

leetcode398 隨機數索引

給定乙個可能含有重複元素的整數陣列,要求隨機輸出給定的數字的索引。您可以假設給定的數字一定存在於陣列中。注意 陣列大小可能非常大。使用太多額外空間的解決方案將不會通過測試。示例 int nums new int solution solution new solution nums pick 3 應...