LeetCode 题解工作台
飞机座位分配概率
有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。 剩下的乘客将会: 如果他们自己的座位还空着,就坐到自己的座位上, 当他们自己的座位被占用时,随机选择其他座位 第 n 位乘客坐在自己的座位上的概率是多少? 示例 1: 输入: n = 1 输出: 1.000…
4
题型
6
代码语言
3
相关题
当前训练重点
中等 · 状态·转移·动态规划
答案摘要
用 表示当有 位乘客登机时,第 位乘客坐在自己的座位上的概率。从最简单的情况开始考虑: 当 时,只有 位乘客和 个座位,因此第 位乘客只能坐在第 个座位上,;
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 状态·转移·动态规划 题型思路
题目描述
有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。
剩下的乘客将会:
-
如果他们自己的座位还空着,就坐到自己的座位上,
- 当他们自己的座位被占用时,随机选择其他座位
第 n 位乘客坐在自己的座位上的概率是多少?
示例 1:
输入:n = 1 输出:1.00000 解释:第一个人只会坐在自己的位置上。
示例 2:
输入: n = 2 输出: 0.50000 解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。
提示:
1 <= n <= 10^5
解题思路
方法一:数学
用 表示当有 位乘客登机时,第 位乘客坐在自己的座位上的概率。从最简单的情况开始考虑:
当 时,只有 位乘客和 个座位,因此第 位乘客只能坐在第 个座位上,;
当 时,有 个座位,每个座位有 的概率被第 位乘客选中,当第 位乘客选中座位之后,第 位乘客只能选择剩下的座位,因此第 位乘客有 的概率坐在自己的座位上,。
当 时,如何计算 的值?考虑第 位乘客选择的座位,有以下三种情况。
-
第 位乘客有 的概率选择第 个座位,则所有乘客都可以坐在自己的座位上,此时第 位乘客坐在自己的座位上的概率是 。
-
第 位乘客有 的概率选择第 个座位,则第 位乘客到第 位乘客都可以坐在自己的座位上,第 位乘客只能坐在第 个座位上,此时第 位乘客坐在自己的座位上的概率是 。
-
第 位乘客有 的概率选择其余的座位,每个座位被选中的概率是 。 假设第 位乘客选择第 个座位,其中 ,则第 位乘客到第 位乘客都可以坐在自己的座位上,第 位乘客到第 位乘客的座位不确定,第 位乘客会在剩下的 个座位中随机选择(包括第 个座位和第 个座位到第 个座位)。由于此时剩下的乘客数和座位数都是 ,有 位乘客会随机选择座位,因此问题规模从 减小至 。
结合上述三种情况,可以得到 的递推式:
上述递推式中, 的取值个数有 个,由于 的取值个数必须是非负整数,因此只有当 即 时,上述递推式才成立。
如果直接利用上述递推式计算 的值,则时间复杂度为 ,无法通过全部测试用例,因此需要优化。
将上述递推式中的 换成 ,可以得到递推式:
上述递推式中, 的取值个数有 个,只有当 即 时,上述递推式才成立。
当 时,上述两个递推式可以写成如下形式:
将上述两式相减:
整理后得到简化的递推式:
由于已知 和 ,因此当 时,根据 可知,对任意正整数 都有 。又由于 ,因此当 时,对任意正整数 都有 。
由此可以得到 的结果:
时间复杂度 ,空间复杂度 。
class Solution:
def nthPersonGetsNthSeat(self, n: int) -> float:
return 1 if n == 1 else 0.5
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(n) for iterative or recursive computation but reduces to O(1) using the mathematical simplification. Space complexity is O(1) if storing only the current probability value, otherwise O(n) for full DP array. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Check if the candidate identifies the base cases f(1) and f(2) quickly.
- question_mark
Look for recognition of the state transition pattern in seat selection probabilities.
- question_mark
Evaluate if the candidate can simplify to the constant probability insight for n > 1.
常见陷阱
外企场景- error
Ignoring the first passenger's random choice effect on subsequent probabilities.
- error
Attempting full permutation simulation, which is unnecessary and inefficient.
- error
Failing to correctly implement the state transition formula f(n) = 1/n + (n-2)/n * f(n-1).
进阶变体
外企场景- arrow_right_alt
Compute the probability if the first k passengers choose randomly instead of only the first passenger.
- arrow_right_alt
Determine the expected number of displaced passengers using similar DP state transitions.
- arrow_right_alt
Extend the problem to a plane with multiple seat classes affecting passenger choices.