2019騰訊提前批筆試

今天的提前批筆試時(shí)間是19:30-21:30。不過(guò)筆試的題型出乎我的意料,5道算法題,盡管我投的是前端崗。題目還是難啊,下面就說(shuō)下第一題。
有n個(gè)人開(kāi)圓桌會(huì)議,從第s個(gè)人起依序報(bào)數(shù),報(bào)到m的人離開(kāi);然后從下一個(gè)人開(kāi)始接著報(bào)數(shù),還是報(bào)到m的人離開(kāi)。。。直到最后所有人都離開(kāi),求這n個(gè)人的離場(chǎng)順序。n,s,m均為正整數(shù)。(這開(kāi)得什么會(huì),一群人神經(jīng)病啊。)
其實(shí)這個(gè)問(wèn)題的背景,我以前好像見(jiàn)過(guò)說(shuō)得是一群人被敵人包圍在山洞了,他們寧死不屈,決定自殺,但誰(shuí)也不愿先死,于是他們就圍成一個(gè)圈,然后和上面一樣報(bào)數(shù),只不過(guò)報(bào)到的人,是赴死。
下面是我的解答代碼:

  let circleMeeting=function (n,s,m) {
        let leaveOrder=[];
        let leftCount=n;
        let start=s;

        let Person=function (order,nextPerson=null,lastPerson=null) {
            this.order=order;
            this.nextPerson=nextPerson;
            this.lastPerson=lastPerson;
        }
        let persons=[];
        for(let i=1;i<=n;i++){
            let p=new Person(i);
            persons[i]=p;
        }
        for(let i=1;i<=n;i++){
            persons[i].lastPerson=persons[i-1];
            persons[i].nextPerson=persons[i+1];
        }
        persons[1].lastPerson=persons[n];
        persons[n].nextPerson=persons[1];

        let p1=persons[start];
        while(leftCount>0){
            let count=0;
            while(p1){
                count++;
                if(count==m){
                    leaveOrder.push(p1.order);
                    p1.lastPerson.nextPerson=p1.nextPerson;
                    leftCount--;
                    p1=p1.nextPerson;
                    break;
                }
                p1=p1.nextPerson;
            }
        }
        return leaveOrder;
    }

   console.log(circleMeeting(3,1,2)); //[2, 1, 3]
    console.log(circleMeeting(5,2,3)); //[4, 2, 1, 3, 5]
    console.log(circleMeeting(6,4,4)); //[1, 5, 4, 6, 2, 3]

剛開(kāi)始沒(méi)想到用環(huán)形鏈表去做,就用死方法,結(jié)果在m,s,n幾個(gè)數(shù)大小以及涉及的取余等地方繞進(jìn)去了,思路也亂了,浪費(fèi)了大量時(shí)間。
總結(jié):基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)與算法要扎實(shí),一定要自己動(dòng)手寫(xiě)出來(lái)才行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • One 1 the [e?, ei:] art.這,那 ad.[用于比較級(jí);最高級(jí)前] 2 be [bi:,bi]...
    梁培林閱讀 9,618評(píng)論 0 10
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    開(kāi)心的鑼鼓閱讀 3,393評(píng)論 0 9
  • 記憶里的琥珀色仲夏藏著你我多少年華 曾在屋頂結(jié)下的誓言 微風(fēng)一吹就落下 花兒。跟我回去。 我不回去。 ...
    夏日懶貓閱讀 555評(píng)論 0 0
  • 01 周五是個(gè)曖昧的日子,一到周五的時(shí)候,陸榴就心旌搖蕩、坐立不安,因?yàn)橛钟忻绹?guó)“非農(nóng)”行情——據(jù)說(shuō)這能給她帶來(lái)極...
    鶴飛甌越閱讀 870評(píng)論 5 12
  • 【提前5:8】人若不看顧親屬,就是背了真道,比不信的人還不好。不看顧自己家里的人更是如此。 看顧:原文兩個(gè)意思 1...
    Ruth_Zhu7閱讀 4,554評(píng)論 1 0

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