【Java】LeetCode 1227. 飞机座位分配概率——数学好一行解决
生活随笔
收集整理的這篇文章主要介紹了
【Java】LeetCode 1227. 飞机座位分配概率——数学好一行解决
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有 n 位乘客即將登機,飛機正好有 n 個座位。第一位乘客的票丟了,他隨便選了一個座位坐下。
剩下的乘客將會:
如果他們自己的座位還空著,就坐到自己的座位上,
當他們自己的座位被占用時,隨機選擇其他座位
第 n 位乘客坐在自己的座位上的概率是多少?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
乍一看應該想到:對于第一個人有三種可能:
①坐上自己的座位,那么之后每一個人都能坐到自己的座位上
②坐上2~n-1內的座位上(假設為x號),那么x之前的所有人都能坐上自己的座位,x號隨機坐,此時轉化為N=n-x+1的問題
③直接坐上n的位置,n沒有位置坐
因此,我們可以從n=2開始計算,存儲之前所有答案即可
要注意的是,雖然n=1時答案為1,但是存儲的答案應該為0,因為除了n號外的人坐上座位都會使得n號坐不上n座位
對于n=2,顯然概率為1/2
對于n=n呢? 概率應該為 (1/n)*1 (坐上自己位置)+(1/n)*P(n-1) (坐上2號位置,變成n-1人問題)+(1/n)*P(n-2) (坐上2號位置,變成n-2人問題) …+(1/n)*0 (坐上n號位置,直接gg)
即P(n)=(1/n)*1+(1/n)(P(n-1)+P(n-2)…+P(1))
有思路了就,寫!
等等!
稍微算了兩個,在P(1)=0,P(2)=1/2的情況下,P(3)P(4)也都等于1/2
是不是,除了P(1)都等于1/2呢?
用數學歸納法其實很好證明,
在2~n-1時P等于1/2 1時P等于0的前提下,帶入以上通式可以得到P(n)就正好等于1/2!!!
而P(1)=0,P(2)=1/2
class Solution {public double nthPersonGetsNthSeat(int n) {if(n==1){return 1;}else{return 0.5;}} }說好的一行呢?
class Solution {public double nthPersonGetsNthSeat(int n) {return n==1?1:0.5;} }
總結
以上是生活随笔為你收集整理的【Java】LeetCode 1227. 飞机座位分配概率——数学好一行解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生活随记 - 孩子教育
- 下一篇: +5V、+12V稳压电源设计