題目:,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m-1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下乙個小朋友開始,繼續0…m-1報數…這樣下去…直到剩下最後乙個小朋友(注:小朋友的編號是從0到n-1)
我們使用vector陣列的erase函式來解決這個問題,遇到要出圈的孩子用erase刪除,遇到陣列結尾重新指向陣列頭就是了。
int
lastremaining_solution
(int n,
int m)
p++;}
if(p==child.
end())
p=child.
erase
(p);
}return child[0]
;}}
遇到的幾個問題:
1.erase的函式原型為iterator erase(iterator i),所以刪除後原來的迭代器p就失效了,要重新返回的p才能繼續使用,不然會出現vector iterator not incompatible的錯誤.
2.在間隔m時,要for(int i=0;i3.在間隔m次後還要再判斷一次是否指向了最後乙個元素後面的空間,因為在之前判斷完之後還進行了一次 p++,如果之前指向的是最後乙個元素,那麼現在就是指向的是child.end(),進行erase時就會出錯,錯誤為vector erase iterator outside range所以還要再判別一次。
劍指offer 刪除重複節點
package 刪除重複節點 需要兩個指標,乙個指向前乙個節點prenode,另乙個指向當前節點node,如果遇到相等的節點,node向後移動,prenode不動,存下node.val方便後面的比較,直到遇到node和node.next不相等,prenode就可以指向node.next 注意 鍊錶開...
劍指offer 孩子們的遊戲
每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...
劍指 offer 孩子們的遊戲
每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...