中山好的网站建设公司/百度公司招聘
题目地址:
https://leetcode.com/problems/airplane-seat-assignment-probability/
有nnn个位置,n≥1n\ge 1n≥1,来了nnn个人,每个人被分配了一个位置。第一个人忘了自己的位置,所以随机挑选了一个位置坐下了。接下来的人会按照如下规则坐位置:
1、如果自己的位置没有被占,则坐上去;
2、如果被占了,则随机找一个别的空位坐下(每个空位概率相等)。
问第nnn个人坐在自己的位置上的概率。
如果只有一个人,答案显然是111。考虑n≥2n\ge 2n≥2的情形。设P(n)P(n)P(n)是nnn个人的情况下第nnn个人坐在自己的位置上的概率。不妨设第iii个人的专属的位置就是iii号位置。那么P(n)P(n)P(n)可以分为两部分,如果一开始疯子就去了111号位,那么第nnn个人一定能坐在自己的位置上;否则的话,如果疯子坐到了222号位,那么就成了同样的问题问对n−1n-1n−1个人,第n−1n-1n−1个人是否能就位,概率是P(n−1)P(n-1)P(n−1);如果疯子坐到了333号位,那么第222个人可以就坐,而从第333个人开始,问题就变为对n−2n-2n−2个人的相同问题,概率是P(n−2)P(n-2)P(n−2),以此类推。所以有:P(n)=1n(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(n−1)+P(n−2)+...+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.5P(n)=P(2)=0.5P(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)。