g0801_0900.s0837_new_21_game.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0801_0900.s0837_new_21_game;
// #Medium #Dynamic_Programming #Math #Sliding_Window #Probability_and_Statistics
// #2022_03_24_Time_5_ms_(77.70%)_Space_43.8_MB_(59.58%)
/**
* 837 - New 21 Game\.
*
* Medium
*
* 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
**/
public class Solution {
public double new21Game(int n, int k, int w) {
if (n >= k + w || k == 0) {
return 1.0;
}
double[] dp = new double[n + 1];
dp[0] = 1.0;
double res = 0.0;
double runningSum = dp[0];
for (int i = 1; i <= n; i++) {
dp[i] = runningSum / w;
if (i < k) {
runningSum += dp[i];
} else {
res += dp[i];
}
if (i - w >= 0) {
runningSum -= dp[i - w];
}
}
return res;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy