本文主要是介绍力扣:1227. 飞机座位分配概率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、其实这道题有点小巧妙
首先排除特殊情况,只有一位乘客,此时,他只能坐自己的位置,所以返回1。
如果第一位乘客坐了自己的位,那么由题意可以知道第n位乘客必然是能坐在自己的座位上。
现在再来看第一位乘客坐错了位置。
那么我们可以认为第一位乘客所坐的就是第二位乘客的位置。
或许有人问,为什么呢?这里解释一下。
如果第一位乘客坐的是第三位乘客的位置,那么第二位乘客就必然能坐在自己的位置上,此时第二位乘客的存在与结果之间没有任何联系,那么我们是否就可以假设没有这第二位乘客和他的那个位置呢?答案是肯定的,去掉第二位乘客,问题将变成求第n-1位乘客是否能坐在自己的位置上,而原来的第三位乘客就变成了第二位乘客。
同理类推,我们就可以认为第一位乘客所坐的就是第二位乘客的位置。
同理,我们也可以认为第二位乘客所坐的就是第三位乘客的位置。(证明和前面一样)
以此类推,最后一位乘客必然无法坐在自己的座位上。
得出结论,如果第一位乘客坐在自己的位置上,那么最后一位乘客将坐在自己的座位上,反之,最后一位乘客将不会坐在自己的座位上,所以结果为1/2;
ps:另一种理解,根据上面的证明,我们可以直接假设第一位乘客所坐的就是最后一位乘客的位置,那么中间那些乘客都可以忽略,最终变成了n为2的问题,答案为1/2;
class Solution {
public:double nthPersonGetsNthSeat(int n) {if(n==1) return n;else return 0.5;}
};
这篇关于力扣:1227. 飞机座位分配概率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!