請先閱讀其他篇解題報告!
上圖是一般的Josephus問題解法,原理是用逆推的方式推算出編號,時間複雜度為O(n)。
不過其實還能夠更快,我參考了以下兩篇文章,並做出修改:
约瑟夫问题(Josephus Problem)的两种快速递归算法 | 贫贫贫贫僧 (haoyuanliu.github.io)
與之前的差別在於我是一圈一圈回推,而不是一個一個,詳細解釋看文章內容。
但我做出了幾個修改:
第一個if,是炸彈傳不到一圈就結束的情況,可以直接給答案,原文只有if (n == 1) return 0。
第二個if,是當炸彈傳一圈只能炸一次時,用遞迴無法有效簡化題目的情形,我將條件改成n < 2 * m,原文是n < m,原文的寫法無法精確表示上述情況。
至於遞迴的部分我就沒有多改了。
目前最快的演算法,有任何問題都歡迎提出!