题目
July 7, 2021 · View on GitHub
0,1,…,n−1 这 n 个数字 (n>0) 排成一个圆圈,从数字 0 开始每次从这个圆圈里删除第 m 个数字。
求出这个圆圈里剩下的最后一个数字。
样例
输入:n=5 , m=3
输出:3
参考答案
#include <list>
class Solution {
public:
int lastRemaining(int n, int m){
list<int> nums;
for (int i = 0; i < n; ++i) nums.push_back(i);
auto it = nums.begin();
int k = m - 1;
while (nums.size() > 1){
while (k--){
it++;
if (it == nums.end()) it = nums.begin();//别迭代器移到开头实现模拟环形列表
}
it = nums.erase(it);//删除第m个元素
if (it == nums.end()) it = nums.begin();
k = m - 1;
}
return nums.front();
}
};