Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: New 21 Game

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "837" 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

Alice plays the following game, loosely based on the card game "21". Alice starts with 0 points and draws numbers while she has less than k points. During each draw, she gains an integer number of points randomly from the range [1, maxPts], where maxPts is an integer. Each draw is independent and the outcomes have equal probabilities. Alice stops drawing numbers when she gets k or more points. Return the probability that Alice has n or fewer points. Answers within 10-5 of the actual answer are considered accepted. Example 1: Input: n = 10, k = 1, maxPts = 10 Output: 1.00000 Explanation: Alice gets a single card, then stops. Example 2: Input: n = 6, k = 1, maxPts = 10 Output: 0.60000 Explanation: Alice gets a single card, then stops. In 6 out of 10 possibilities, she is at or below 6 points. Example 3: Input: n = 21, k = 17, maxPts = 10 Output: 0.73278 Constraints: 0 <= k <= n <= 104 1 <= maxPts <= 104

Explanation

Here's a breakdown of the approach, complexity, and the Python code:

  • Approach:

    • Dynamic Programming: Calculate the probability of reaching each score from k to n using the probabilities of reaching lower scores.
    • Sliding Window Optimization: Use a sliding window to efficiently compute the sum of probabilities for the previous maxPts scores, avoiding redundant calculations. This is key for performance.
  • Complexity:

    • Runtime: O(n)
    • Storage: O(n)

Code

    def new21Game(n: int, k: int, maxPts: int) -> float:
    """
    Calculates the probability that Alice has n or fewer points.

    Args:
        n: The maximum number of points Alice can have.
        k: The number of points Alice needs to reach to stop drawing.
        maxPts: The maximum number of points Alice can gain in a single draw.

    Returns:
        The probability that Alice has n or fewer points.
    """

    if k == 0:
        return 1.0
    if n >= k + maxPts:
        return 1.0

    dp = [0.0] * (n + 1)
    dp[0] = 1.0
    window_sum = 1.0
    probability = 0.0

    for i in range(1, n + 1):
        dp[i] = window_sum / maxPts
        if i < k:
            window_sum += dp[i]
        else:
            probability += dp[i]
        if i >= maxPts:
            window_sum -= dp[i - maxPts]

    return probability

More from this blog

C

Chatmagic blog

2894 posts

Solving Leetcode Interviews in Seconds with AI: New 21 Game