Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Random Pick Index

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "398" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

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. Example 1: 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. 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.

Explanation

  • Reservoir Sampling: Use reservoir sampling to efficiently select a random index without knowing the total count of the target element beforehand. This avoids the need for storing all indices of the target and ensures equal probability for each valid index.
    • Iterate and Update: Iterate through the input array. If an element matches the target, increment a counter and update the reservoir (selected index) with a probability of 1/counter.
    • Initialization: Store the input array nums during initialization for subsequent pick operations.
  • Runtime Complexity: O(n) for pick, O(1) for initialization. Storage Complexity: O(n), to store the input array.

Code

    import random

class Solution:
    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        self.nums = nums

    def pick(self, target):
        """
        :type target: int
        :rtype: int
        """
        res = -1
        count = 0
        for i, num in enumerate(self.nums):
            if num == target:
                count += 1
                if random.random() < (1 / count):
                    res = i
        return res

More from this blog

C

Chatmagic blog

2894 posts