1227. Airplane Seat Assignment Probability

n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of passengers will:

  • Take their own seat if it is still available,

  • Pick other seats randomly when they find their seat occupied

What is the probability that the n-th person can get his own seat?

Example 1:

Input: n = 1
Output: 1.00000
Explanation: The first person can only get the first seat.

Example 2:

Input: n = 2
Output: 0.50000
Explanation: The second person has a probability of 0.5 to get the second seat (when first person gets the first seat).

Constraints:

  • 1 <= n <= 10^5

f(n) = (1 / n) * 1 + (n - 2) / 2 * f(n - 1) f(1) = 1.0 f(2) = 0.5 ... Assume f(k) = 0.5 f(k + 1) = 1 / (k + 1) + ((k + 1) - 2) / (k + 1) * f(k) = 2 / 2 * (k + 1) + (k - 1) / (k + 1) * (1 / 2) = (k + 1) / 2 * (k + 1) = 1 / 2 = 0.5 So we obtain f(n) = 0.5

// Recursion
double nthPersonGetsNthSeat(int n) {
    if (n == 1) return 1.0;
    return 1.0 / n + static_cast<double>(n - 2) / static_cast<double>(n) * nthPersonGetsNthSeat(n - 1);
}
// Dynamic Programming
double nthPersonGetsNthSeat(int n) {
    vector<double> dp(n);
    dp[0] = 1.0;
    for (int i = 1; i < n; ++i) {
        dp[i] = 1.0 / (i + 1) + static_cast<double>(i + 1 - 2) / static_cast<double>(i + 1) * dp[i - 1];
    }
    return dp.back();
}
double nthPersonGetsNthSeat(int n) {
    return n == 1 ? 1.0 : 0.5;
}

Last updated

Was this helpful?