約瑟夫環(huán)問題

題目描述:

每年六一兒童節(jié),??投紩?zhǔn)備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為??偷馁Y深元老,自然也準(zhǔn)備了一些小游戲。其中,有個(gè)游戲是這樣的:首先,讓小朋友們圍成一個(gè)大圈。然后,他隨機(jī)指定一個(gè)數(shù)m,讓編號為0的小朋友開始報(bào)數(shù)。每次喊到m-1的那個(gè)小朋友要出列唱首歌,然后可以在禮品箱中任意的挑選禮物,并且不再回到圈中,從他的下一個(gè)小朋友開始,繼續(xù)0...m-1報(bào)數(shù)....這樣下去....直到剩下最后一個(gè)小朋友,可以不用表演,并且拿到牛客名貴的“名偵探柯南”典藏版(名額有限哦!!_)。請你試著想下,哪個(gè)小朋友會得到這份禮品呢?(注:小朋友的編號是從0到n-1)

如果沒有小朋友,請返回-1

示例:

輸入:5,3
返回: 1

思路:

這是典型的約瑟夫環(huán)問題。使用一個(gè)單向環(huán)形鏈表模擬。

code:

import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if(n<1||m<1){
            return -1;
        }
        List<Integer> list = new ArrayList<>();
        //構(gòu)建list
        for(int i = 0;i<n;i++){
            list.add(i);
        }
        int cur = -1;
        while(list.size()>1){
            for(int i = 0;i<m;i++){
                cur++;
                if(cur == list.size()){
                    cur = 0;
                }
            }
            list.remove(cur);
            cur--;//cur--的原因,因?yàn)樾碌膌ist中cur指向了下一個(gè)元素,為了保證移動(dòng)m個(gè)準(zhǔn)確性,所以cur向前移動(dòng)一位。
        }
        return list.get(0);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問題描述 歷史典故: 據(jù)說著名猶太歷史學(xué)家 Josephus有過以下的故事: 在羅馬人占領(lǐng)喬塔帕特后,39 個(gè)猶太...
    neo_ng閱讀 576評論 0 0
  • 思路 約瑟夫環(huán)問題 :題目是 假設(shè)有N個(gè)小朋友按順序圍成一圈,每個(gè)小朋友都有一個(gè)編號,假設(shè)從第m個(gè)小朋友從1開始...
    ShiPF閱讀 360評論 0 0
  • 百度百科: 約瑟夫環(huán)(約瑟夫問題)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號1,2,3...n分別表示)圍坐在一張圓...
    KPort閱讀 3,976評論 0 4
  • 參考文章 約瑟夫環(huán)之二(用遞歸的思想解決Josephus問題) 解釋 解法 初始情況: 0, 1, 2 ........
    Mjolnir1107閱讀 1,070評論 0 1
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,798評論 0 11

友情鏈接更多精彩內(nèi)容