zoukankan      html  css  js  c++  java
  • 1227. 飞机座位分配概率

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

    剩下的乘客将会:

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

    当他们自己的座位被占用时,随机选择其他座位
    第 n 位乘客坐在自己的座位上的概率是多少?

    示例 1:

    输入:n = 1
    输出:1.00000
    解释:第一个人只会坐在自己的位置上。
    示例 2:

    输入: n = 2
    输出: 0.50000
    解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。
     

    提示:

    1 <= n <= 10^5

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability

    一看到这种题就是要数学分析

    搞个函数f(n),很明显有三种情况

    1

    0.5

    f(n-i+1)

    我们分析f(n-i+1),发现有

    f(n)
    = 1/n + 0 + 1/n * (f(n-1) + f(n-2) + ... + f(2))
    = 1/n * (f(n-1) + f(n-2) + ... + f(2) + 1)
    = 1/n * (f(n-1) + f(n-2) + ... + f(2) + f(1))*****(1)

    f(n-1) = 1/(n-1) * (f(n-2) + f(n-3) + ... + f(1))*****(2)

    (1) ,(2) 两边分别同乘 n 和 n - 1
    n * f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1)******(3)
    (n-1) * f(n-1) = f(n-2) + f(n-3) + ... + f(1)******(4)
    (3)-(4)得
     n * f(n) - (n-1)*f(n-1) = f(n-1)
    =>f(n)=f(n-1)
    这就爽了
    class Solution:
        def nthPersonGetsNthSeat(self, n: int) -> float:
            return 1 if n==1 else .5
     
     
  • 相关阅读:
    Are You Safer With Firefox?(zz)
    IIS+PHP下调用WebService初试
    垃圾链接和网络欺骗
    微软即将发布64位XP和Win2003 SP1(zz)
    今日个人大事记:)
    GT4 Web Service编译和发布初探
    纪念一下QQ等级和在线时长
    今天安装GT3.9.5碰到的问题
    判断32位整数二进制中1的个数
    Windows 2003 SP1新体验
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13374715.html
Copyright © 2011-2022 走看看