leetcode 1227.飞机座位分配概率

原题如下:

https://leetcode-cn.com/problems/airplane-seat-assignment-probability/
在这里插入图片描述

题解:

n比较小时

可以看出,如果飞机上只有1个座位,那么这个丢了机票的人就只能坐在自己的位置上,不会坐错,此时爱侣就是1;
如果飞机上有两个座位,那么,第一位乘客有一半的概率坐在自己的位置上,那么第二位乘客就有一半的概率坐在自己的位置上,概率此时就是1/2;
当有3个位置的时候,首先第一个人坐到自己位置的概率是1/3,在这种前提下,别人都能坐在自己位置,那么我们再看第一个人没有坐在自己位置的时候,假设他坐在了第三个人的位置,那么就是无论如何,第三个人也不会坐在自己的位置;另外就是假如第一个人坐在了第二个人的位置,那么第二个人可能坐在了第一个人的位置此时的概率就是1/3*1/2=1/6,合起来就是1/3+1/6=1/2;

n是某个大于1的数

好了,现在我们来讨论一般性的推导,假如已经正确求出了n个座位的时候的概率P(n),如何求P(n+1)。
如果第n+1号乘客有可能坐在自己的座位上,那么在他上飞机的时候,自己的座位不能够被占,这里分两种情况:第一种是第一位(丢了机票的那个)上飞机的时候,在碰巧坐在了自己的位置,这个概率是1/(n+1);第二种是第一位乘客坐在了不是第n位乘客的位置,假如说是第k位乘客的位置,那么我们就可以想象着“把那个第一个乘客和他所占着的第k个位置剔除出去”,剩下的位置有第一个乘客本来应该坐的位置,和其他(n-1)个位置,以及2~(n+1)这n名乘客。我们这时就可以人为,那个被占了位置的k号乘客也是丢了机票的,只不过此时他自己“本来的位置”就是那个原来的1号乘客的位置,也就是在此时,剔除了一个座位和一个乘客后,在n个乘客和n个座位里面,最后一名乘客做到自己的位置的概率是P(n)。
那么根据以上的推导,有P(n+1)=1/(n+1)+((n-1)/(n+1))*P(n),并发现,当n>1的时候,P(n)=0.5恒成立。
本思路java代码示例

/*
 *作者@v7fgg
 *执行用时 :43 ms, 在所有 Java 提交中击败了5.03%的用户
 *内存消耗 :45.9 MB, 在所有 Java 提交中击败了25.00%的用户
 *2020年6月4日 14:41
 */
class Solution {
    public double nthPersonGetsNthSeat(int n) {
        if(n==1){
            return 1;
        }
        return 1.0/n+(double)(n-2)/n*nthPersonGetsNthSeat(n-1);
    }
}

那么进一步根据以上的推导,有P(n+1)=1/(n+1)+((n-1)/(n+1))*P(n),并发现,当n>1的时候,P(n)=0.5恒成立。

/*
 *作者@v7fgg
 *执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户
 *内存消耗 :36.4 MB, 在所有 Java 提交中击败了25.00%的用户
 *2020年6月4日 11:36
 */
class Solution {
    public double nthPersonGetsNthSeat(int n) {
        return n<2?1:0.5;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值