LeetCode 面試題62. 圓圈中最后剩下的數(shù)字

面試題62. 圓圈中最后剩下的數(shù)字


題目來(lái)源:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof

題目


0,1,,n-1這n個(gè)數(shù)字排成一個(gè)圓圈浪汪,從數(shù)字0開(kāi)始,每次從這個(gè)圓圈里刪除第m個(gè)數(shù)字玷犹。求出這個(gè)圓圈里剩下的最后一個(gè)數(shù)字隔披。

例如,0鸠姨、1铜秆、2、3讶迁、4這5個(gè)數(shù)字組成一個(gè)圓圈连茧,從數(shù)字0開(kāi)始每次刪除第3個(gè)數(shù)字,則刪除的前4個(gè)數(shù)字依次是2、0啸驯、4客扎、1,因此最后剩下的數(shù)字是3罚斗。

示例 1:

輸入: n = 5, m = 3
輸出: 3

示例 2:

輸入: n = 10, m = 17
輸出: 2

限制:

  • 1 <= n <= 10^5
  • 1 <= m <= 10^6

解題思路


思路:數(shù)學(xué)解法虐唠。(逆推)

這道題目屬于約瑟夫環(huán)問(wèn)題。(有點(diǎn)像丟手絹惰聂,攤手)

針對(duì)這個(gè)題目疆偿,先說(shuō)說(shuō)難點(diǎn):

  • 數(shù)字組成是環(huán)形的結(jié)構(gòu),當(dāng)數(shù)到最后個(gè)數(shù)字時(shí)搓幌,還不是需要?jiǎng)h除的第 m 個(gè)數(shù)杆故,需要回至數(shù)組的首位繼續(xù);
  • 每次重新數(shù)的位置溉愁,都是上次刪除數(shù)字的下一位处铛。

針對(duì)第一個(gè)難點(diǎn),可以考慮取模拐揭;

針對(duì)第二個(gè)難點(diǎn)撤蟆,可以考慮將刪除數(shù)字下一位,作為下次重新數(shù)的起點(diǎn)堂污,剩余數(shù)字依次排列家肯。(注意數(shù)字組成是環(huán)狀的)

考慮先模擬,然后再進(jìn)行逆推:

模擬

(為體現(xiàn)閉環(huán)盟猖,這里將數(shù)組進(jìn)行復(fù)制讨衣。注意: 未得到最后 1 位數(shù)時(shí),除第 1 輪開(kāi)始 式镐,每一輪都是以上一輪刪除數(shù)字下一位作為起點(diǎn)反镇,重新數(shù)需要?jiǎng)h除的第 m 個(gè)數(shù))

這就是模擬之后得到的結(jié)果。

現(xiàn)在我們來(lái)進(jìn)行逆推:

最終確定的 1 個(gè)數(shù)字娘汞,這個(gè)數(shù)字對(duì)應(yīng)的索引一定是 0歹茶,逆推這個(gè)最終數(shù)字在每一輪中所處的索引位置,那么假設(shè)(n 表示數(shù)組元素個(gè)數(shù)你弦,m 表示要?jiǎng)h除的第 m 個(gè)數(shù)惊豺,取示例 1,n = 5鳖目, m = 3):

  • n = 1 時(shí)扮叨,索引:0;
  • n = 2 時(shí)领迈,索引:(0 + m) % 2;
  • n = 3 時(shí),索引:((0 + m) % 2 + 3) % 3狸捅;
  • n = 4 時(shí)衷蜓,索引:(((0 + m) % 2 + 3) % 3 + m) % 4;
  • n = 5 時(shí)尘喝,索引:((((0 + m) % 2 + 3) % 3 + m) % 4 + m) % 5磁浇。

大致講下前面的逆推過(guò)程,找出剩余元素在前面每一輪所處的位置:

  • 當(dāng)剩下 1 個(gè)數(shù)字的時(shí)候朽褪,這個(gè)數(shù)字的索引為 0置吓;
  • 往前逆推,當(dāng)剩下 2 個(gè)數(shù)字的時(shí)候缔赠,在上一輪元素索引的基礎(chǔ)上衍锚,要補(bǔ)上 m 個(gè)位置,然后對(duì)數(shù)組元素個(gè)數(shù)取模嗤堰,得到這一輪該元素所在的位置戴质,代入 n,m踢匣,可得索引為 1告匠;
  • 當(dāng)剩下 3 個(gè)數(shù)字時(shí),同樣補(bǔ)上 m 個(gè)位置离唬,然后對(duì)數(shù)組元素個(gè)數(shù)取模(這個(gè)時(shí)候數(shù)組元素個(gè)數(shù)為 3)后专,代入 m,n输莺,得索引為 1行贪;
  • ...

對(duì)上面的逆推過(guò)程進(jìn)行總結(jié):從最后 1 輪往前逆推時(shí),前面一輪的元素所處的位置為模闲,(當(dāng)前索引 + m) % 前面一輪元素個(gè)數(shù)建瘫。

那么根據(jù)這個(gè)公式,用代碼進(jìn)行實(shí)現(xiàn)尸折。

代碼實(shí)現(xiàn)


class Solution:
    def lastRemaining(self, n: int, m: int) -> int:
        ans = 0
        # 最后 1 位為最終保留數(shù)字
        # 往前逆推啰脚,從元素個(gè)數(shù)為 2 開(kāi)始
        for i in range(2, n + 1):
            # 逆推公式
            ans = (ans + m) % i
        
        return ans

實(shí)現(xiàn)結(jié)果


實(shí)現(xiàn)結(jié)果

以上就是通過(guò)數(shù)學(xué)解法進(jìn)行逆推,進(jìn)而解決《面試題62. 圓圈中最后剩下的數(shù)字》問(wèn)題的主要內(nèi)容实夹。


歡迎關(guān)注微信公眾號(hào)《書(shū)所集錄》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末橄浓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亮航,更是在濱河造成了極大的恐慌荸实,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缴淋,死亡現(xiàn)場(chǎng)離奇詭異准给,居然都是意外死亡泄朴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)露氮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祖灰,“玉大人,你說(shuō)我怎么就攤上這事畔规【址觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵叁扫,是天一觀的道長(zhǎng)三妈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)莫绣,這世上最難降的妖魔是什么畴蒲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮兔综,結(jié)果婚禮上饿凛,老公的妹妹穿的比我還像新娘。我一直安慰自己软驰,他們只是感情好涧窒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锭亏,像睡著了一般纠吴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慧瘤,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天戴已,我揣著相機(jī)與錄音,去河邊找鬼锅减。 笑死糖儡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怔匣。 我是一名探鬼主播握联,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼每瞒!你這毒婦竟也來(lái)了金闽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剿骨,失蹤者是張志新(化名)和其女友劉穎代芜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浓利,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挤庇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年钞速,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罚随。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玉工,死狀恐怖羽资,靈堂內(nèi)的尸體忽然破棺而出淘菩,到底是詐尸還是另有隱情,我是刑警寧澤屠升,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布潮改,位于F島的核電站,受9級(jí)特大地震影響腹暖,放射性物質(zhì)發(fā)生泄漏汇在。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一脏答、第九天 我趴在偏房一處隱蔽的房頂上張望糕殉。 院中可真熱鬧,春花似錦殖告、人聲如沸阿蝶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)羡洁。三九已至,卻和暖如春爽丹,著一層夾襖步出監(jiān)牢的瞬間筑煮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工粤蝎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留真仲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓初澎,卻偏偏與公主長(zhǎng)得像秸应,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谤狡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容