力扣题解(飞机座位分配概率)

1227. 飞机座位分配概率

已解答

中等

相关标签

相关企业

提示

n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。

剩下的乘客将会:

  • 如果他们自己的座位还空着,就坐到自己的座位上,

  • 当他们自己的座位被占用时,随机选择其他座位

n 位乘客坐在自己的座位上的概率是多少?

思路:

本题需要注意的一点是乘客有先后顺序,第i个乘客入座之前,前i-1个乘客必须已经入座。

那么,对于第一个乘客,有1/n概率坐在自己的位置,有1/n坐在n号位置,其余情况在2,n-1中随意入座,当坐在自己位置时,所有乘客顺序入座,则只有一种情况,此时必定可以n坐在n号座位。当坐在n号座位时,一定无法满足n坐在自己座位,概率为0。当处于i位置时,则二号乘客到i-1号乘客,都可以顺序入座,i号乘客要在1号座位或者i+1到n号座位中入座,此时有n-i+1个乘客,n-i+1个座位,乘客编号是i.i+1,i+2,.....n,座位编号是1,i+1,i+2,....n.可以发现,只有一个编号和乘客是不对应的,但是此时把座位1编号看成i不会有任何影响,因为能对结果产生影响的是乘客坐的相对位置,而不是单纯的编号对应乘客。比如,如果i号乘客坐在1号位置,就是正常一一对应。如果i号乘客坐在n位置,就是失败,如果坐在j位置,就是I+1号乘客到j-1顺序入座,然后继续判断,判断逻辑是一致的,因此是没有影响的。

则f(n)=1/n+1/n*f(n-i+1)(i从2到n-1).

f(n-1)=1/(n-1)+1/(n-1)*f(n-1-i+1)(i从2到n-2).

可以经过式子化简得出f(n)=f(n-1),因此n=1为1,n!=1为0.5.

个人感觉主要难点就在于理解i号乘客坐在坐在1位置可以想象成正常情况下坐在i位置。

复制代码
class Solution {
public:
   
    double f(int n)
    {
        if(n==1)
        return 1;
    
        return 0.5;


    }

    double nthPersonGetsNthSeat(int n) {
      
      return f(n);
    }
};
相关推荐
阿pin3 小时前
Java随笔-红黑树
java·python·算法·红黑树
Hi李耶3 小时前
【LeetCode】17.电话号码的字母组合
算法·leetcode·职场和发展
江畔柳前堤11 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore12 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考14 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX15 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面15 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号16 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽16 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI16 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研