題目描述
每年六一兒童節,nowcoder都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為nowcoder的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下乙個小朋友開始,繼續0…m-1報數….這樣下去….直到剩下最後乙個小朋友,可以不用表演,並且拿到nowcoder名貴的「名偵探柯南」典藏版(名額有限哦!!^_^)。請你試著想下,哪個小朋友會得到這份禮品呢?
比較普遍的思路是把這n個整數做成乙個環,當數到哪個數的時候就把那個數移除,並從下乙個數重新開始數。所已基本思路是:使用陣列模擬環,當當前的元素的值n相等的時候,就回到第乙個位置重新遍歷,每次當前元素的移動都伴隨計步器的增加(每次增加1),當步數等於m的時候,則把當前元素的設為-1,表示已被刪除,並重新設定計步器的值為0,還需要把n的值減小1,表示陣列中的元素被移除了乙個。下面是基於這種思路的實現**(已被牛客ac):
package com.rhwayfun.offer;
public
class lastremainingnumber
}return cur;
}public
static
void
main(string args)
}
還有一種是根據每次刪除元素的特點進行實現的,就是書上的思路:
public
intlastremaining_solution(int n, int m)
劍指offer 四十二 之左旋轉字串
題目描述 組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,搞定它!public ...
劍指offer(四十二) 和為S的兩個數
題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。題解 這道題一開始被誤導了,想通了就比較簡單了。這裡面給出了兩個限制條件來查詢目標元素 1 和為s 2 乘積最小。仔細想想,在和相同的情況下,兩數差值越大,積不就...
劍指offer系列之四十四 翻轉單詞順序
題目描述 牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a stu...