1. 程式人生 > 實用技巧 >1227. 飛機座位分配概率

1227. 飛機座位分配概率

有 n 位乘客即將登機,飛機正好有 n 個座位。第一位乘客的票丟了,他隨便選了一個座位坐下。

剩下的乘客將會:

如果他們自己的座位還空著,就坐到自己的座位上,

當他們自己的座位被佔用時,隨機選擇其他座位
第 n位乘客坐在自己的座位上的概率是多少?

示例 1:

輸入:n = 1
輸出:1.00000
解釋:第一個人只會坐在自己的位置上。
示例 2:

輸入: n = 2
輸出: 0.50000
解釋:在第一個人選好座位坐下後,第二個人坐在自己的座位上的概率是 0.5。

提示:

1 <= n <= 10^5

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/airplane-seat-assignment-probability


一看到這種題就是要數學分析

搞個函式f(n),很明顯有三種情況

1

0.5

f(n-i+1)

我們分析f(n-i+1),發現有

f(n)
= 1/n + 0 + 1/n * (f(n-1) + f(n-2) + ... + f(2))
= 1/n * (f(n-1) + f(n-2) + ... + f(2) + 1)
= 1/n * (f(n-1) + f(n-2) + ... + f(2) + f(1))*****(1)

f(n-1) = 1/(n-1) * (f(n-2) + f(n-3) + ... + f(1))*****(2)

(1) ,(2) 兩邊分別同乘 n 和 n - 1
n * f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1)******(3)
(n-1) * f(n-1) = f(n-2) + f(n-3) + ... + f(1)******(4)
(3)-(4)得
 n * f(n) - (n-1)*f(n-1) = f(n-1)
=>f(n)=f(n-1)
這就爽了
class Solution:
    def nthPersonGetsNthSeat(self, n: int) -> float:
        return 1 if n==1 else .5