【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 題目描述
- 思路 & 代碼
- 鏈表模擬法
- 數(shù)學(xué)方法
- 二刷
題目描述
- 約瑟夫環(huán)!題目可太經(jīng)典了
- 說(shuō)實(shí)話還是有點(diǎn)難度的= =
思路 & 代碼
鏈表模擬法
- 第一想法是用 LinkedList,但是會(huì)超時(shí),于是選擇ArrayList
- 關(guān)鍵在于 index = (index + m - 1) % n這個(gè)公式的推導(dǎo),注意這個(gè) -1 噢~
數(shù)學(xué)方法
- 倒推法,非常厲害,需要花時(shí)間理解。
- 甜姨的這篇題解寫得很好
- 主要思路:經(jīng)過(guò) n 輪后,只剩下最后一個(gè)答案,此時(shí)下標(biāo)一定為0。那么往前推到經(jīng)過(guò) n - 1輪后,此時(shí)有兩個(gè)數(shù)字,如果能推出此時(shí)答案下標(biāo),那么就可以迭代地推到一開(kāi)始(未去掉數(shù)字時(shí))的答案下標(biāo),然后就得到答案了~
- 想推出上一輪下標(biāo),此時(shí)有什么信息:當(dāng)前輪下標(biāo)、當(dāng)前輪數(shù)字個(gè)數(shù)、規(guī)定刪除計(jì)數(shù)。
- 根據(jù)這三個(gè)已知量,有公式 ans = (m + ans) % i。其實(shí)就是往前補(bǔ) m 個(gè),然后再取余即可。
二刷
- 模擬法
- 數(shù)學(xué)法:倒推, 先 + m 恢復(fù)到上一狀態(tài),再用上一狀態(tài)長(zhǎng)度 i 來(lái)進(jìn)行數(shù)值修正
總結(jié)
以上是生活随笔為你收集整理的【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【学习笔记】第四章——文件 II(基本操
- 下一篇: 【LeetCode笔记】剑指 Offer