【Leetcode】1227. Airplane Seat Assignment Probability(配数学证明)

题目地址:

https://leetcode.com/problems/airplane-seat-assignment-probability/

n n n个位置, n ≥ 1 n\ge 1 n1,来了 n n n个人,每个人被分配了一个位置。第一个人忘了自己的位置,所以随机挑选了一个位置坐下了。接下来的人会按照如下规则坐位置:
1、如果自己的位置没有被占,则坐上去;
2、如果被占了,则随机找一个别的空位坐下(每个空位概率相等)。
问第 n n n个人坐在自己的位置上的概率。

如果只有一个人,答案显然是 1 1 1。考虑 n ≥ 2 n\ge 2 n2的情形。设 P ( n ) P(n) P(n) n n n个人的情况下第 n n n个人坐在自己的位置上的概率。不妨设第 i i i个人的专属的位置就是 i i i号位置。那么 P ( n ) P(n) P(n)可以分为两部分,如果一开始疯子就去了 1 1 1号位,那么第 n n n个人一定能坐在自己的位置上;否则的话,如果疯子坐到了 2 2 2号位,那么就成了同样的问题问对 n − 1 n-1 n1个人,第 n − 1 n-1 n1个人是否能就位,概率是 P ( n − 1 ) P(n-1) P(n1);如果疯子坐到了 3 3 3号位,那么第 2 2 2个人可以就坐,而从第 3 3 3个人开始,问题就变为对 n − 2 n-2 n2个人的相同问题,概率是 P ( n − 2 ) P(n-2) P(n2),以此类推。所以有: P ( n ) = 1 n ( 1 + P ( n − 1 ) + P ( n − 2 ) + . . . + P ( 2 ) ) P(n)=\frac{1}{n}(1+P(n-1)+P(n-2)+...+P(2)) P(n)=n1(1+P(n1)+P(n2)+...+P(2))所以: ( n + 1 ) P ( n ) = ( n + 1 ) P ( n + 1 ) , P ( n ) = P ( n + 1 ) (n+1)P(n)=(n+1)P(n+1),P(n)=P(n+1) (n+1)P(n)=(n+1)P(n+1),P(n)=P(n+1)所以 P ( n ) = P ( 2 ) = 0.5 P(n)=P(2)=0.5 P(n)=P(2)=0.5。代码如下:

public class Solution {
    
    
    public double nthPersonGetsNthSeat(int n) {
    
    
        return n == 1 ? 1 : 0.5;
    }
}

时空复杂度 O ( 1 ) O(1) O(1)

猜你喜欢

转载自blog.csdn.net/qq_46105170/article/details/121187368