98. Random Pick Index
Из целочисленного массива nums с возможными дубликатами случайным образом выведите индекс заданного целевого числа. Можно предположить, что заданное целевое число должно существовать в массиве. Реализация класса Solution: Solution(int[] nums) Инициализирует объект с массивом nums. int pick(int target) Выбирает случайный индекс i из nums, где nums[i] == target. Если существует несколько допустимых i, то каждый индекс должен иметь равную вероятность возврата.
Пример:
Input
["Solution", "pick", "pick", "pick"]
[[[1, 2, 3, 3, 3]], [3], [1], [3]]
Output
[null, 4, 0, 2]
C# решение
сопоставлено/оригиналpublic class Solution {
private int[] nums;
private Random random;
public Solution(int[] nums) {
this.nums = nums;
this.random = new Random();
}
public int Pick(int target) {
int count = 0;
int result = -1;
for (int i = 0; i < nums.Length; i++) {
if (nums[i] == target) {
count++;
if (random.Next(count) == count - 1) {
result = i;
}
}
}
return result;
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
private vector<int>& nums;
private Random random;
public Solution(vector<int>& nums) {
this.nums = nums;
this.random = new Random();
}
public int Pick(int target) {
int count = 0;
int result = -1;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == target) {
count++;
if (random.Next(count) == count - 1) {
result = i;
}
}
}
return result;
}
}
Java решение
auto-draft, проверить перед отправкойimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
private int[] nums;
private Random random;
public Solution(int[] nums) {
this.nums = nums;
this.random = new Random();
}
public int Pick(int target) {
int count = 0;
int result = -1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target) {
count++;
if (random.Next(count) == count - 1) {
result = i;
}
}
}
return result;
}
}
Algorithm
Инициализируйте объект с массивом nums. Сохраните этот массив для дальнейшего использования.
Реализуйте метод pick(target), который выбирает случайный индекс i из массива nums, где nums[i] равен target. Если таких индексов несколько, каждый из них должен иметь равную вероятность быть выбранным.
Для реализации метода pick используйте алгоритм reservoir sampling для выбора случайного индекса.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.