【Java】LeetCode 1227. 飞机座位分配概率——数学好一行解决

有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。
剩下的乘客将会:
如果他们自己的座位还空着,就坐到自己的座位上,
当他们自己的座位被占用时,随机选择其他座位
第 n 位乘客坐在自己的座位上的概率是多少?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

乍一看应该想到:对于第一个人有三种可能:

①坐上自己的座位,那么之后每一个人都能坐到自己的座位上
②坐上2~n-1内的座位上(假设为x号),那么x之前的所有人都能坐上自己的座位,x号随机坐,此时转化为N=n-x+1的问题
③直接坐上n的位置,n没有位置坐

因此,我们可以从n=2开始计算,存储之前所有答案即可

要注意的是,虽然n=1时答案为1,但是存储的答案应该为0,因为除了n号外的人坐上座位都会使得n号坐不上n座位

对于n=2,显然概率为1/2

对于n=n呢? 概率应该为 (1/n)*1 (坐上自己位置)+(1/n)*P(n-1) (坐上2号位置,变成n-1人问题)+(1/n)*P(n-2) (坐上2号位置,变成n-2人问题) …+(1/n)*0 (坐上n号位置,直接gg)

即P(n)=(1/n)*1+(1/n)(P(n-1)+P(n-2)…+P(1))

有思路了就,写!

等等!

稍微算了两个,在P(1)=0,P(2)=1/2的情况下,P(3)P(4)也都等于1/2

是不是,除了P(1)都等于1/2呢?

用数学归纳法其实很好证明,
在2~n-1时P等于1/2 1时P等于0的前提下,带入以上通式可以得到P(n)就正好等于1/2!!!
而P(1)=0,P(2)=1/2
class Solution {
    public double nthPersonGetsNthSeat(int n) {
        if(n==1){
            return 1;
        }else{
            return 0.5;
        }
    }
}

说好的一行呢?

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


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值