코딩 테스트/LeetCode

Medium - Random Pick Index

알 수 없는 사용자 2023. 8. 7. 18:49
728x90

https://leetcode.com/problems/random-pick-index/description/

 

Random Pick Index - LeetCode

Can you solve this real interview question? Random Pick Index - Given an integer array nums with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array. Implement the Sol

leetcode.com

문제 설명

Given an integer array nums with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array.

Implement the Solution class:

  • Solution(int[] nums) Initializes the object with the array nums.
  • int pick(int target) Picks a random index i from nums where nums[i] == target. If there are multiple valid i's, then each index should have an equal probability of returning.

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -231 <= nums[i] <= 231 - 1
  • target is an integer from nums.
  • At most 104 calls will be made to pick.

예시

Input
["Solution", "pick", "pick", "pick"]
[[[1, 2, 3, 3, 3]], [3], [1], [3]]
Output
[null, 4, 0, 2]

Explanation
Solution solution = new Solution([1, 2, 3, 3, 3]);
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.
solution.pick(1); // It should return 0. Since in the array only nums[0] is equal to 1.
solution.pick(3); // It should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.

풀이

class Solution:

    def __init__(self, nums: List[int]):
        self.index = dict()
        for i, num in enumerate(nums):
            if num not in self.index:
                self.index[num] = [1, i]
            else:
                self.index[num].append(i)
        

    def pick(self, target: int) -> int:
        idx = self.index[target][0]
        self.index[target][0] = idx + 1 if idx + 1 != len(self.index[target]) else 1
        return self.index[target][idx]
        

# Your Solution object will be instantiated and called as such:
# obj = Solution(nums)
# param_1 = obj.pick(target)

 

728x90