Skip to content

飞机座位分配概率

题目链接:https://leetcode.cn/problems/airplane-seat-assignment-probability/

面对这道题首先寻找规律

  • n=1 时答案显然为 1
  • n=2 时,1/2 概率,1 号坐在一号位,那么 2 号自然坐 2 号位符合题意。1/2 概率,1 号坐在 2 号位,不符合题意。由此 n=2 时,答案为 1/2
  • n=3 时,首先 1/3 概率,1 号坐一号位,符合题意。1/3 概率,1 号坐 2 号位,其中 1/2 可能性,2 号坐 1 号位,3 号坐 3 号位符符合题意。由此 n=3 时答案为 1/3+1/6,答案为 1/2

根据上述思路可以推得 f(n)=(1/n)+((n-2)(f(n-1))(1/n)) 这就是 dp 的递推公式

这里给出 ts 的示例代码

function nthPersonGetsNthSeat(n: number): number {
    if (n === 1) return 1;
    let dp = new Array(n).fill(0);
    dp[0] = 1;
    for (let i = 1; i < n; i++) {
        dp[i]=(1/(i+1))+(i-1)*((1/(i+1))*dp[i-1])
    }
    return dp[n - 1]
}

另外,尝试开始几个数之后会发现 n>1 时的答案都是 1/2 所以代码也可以如下书写

function nthPersonGetsNthSeat(n: number): number {
    let dp=
    if(n==1){
        return 1
    }else{
        return 0.5
    }
};
本站访客数 人次 本站总访问量