题目描述:
0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。
求出这个圆圈里剩下的最后一个数字。
样例
输入:n=5 , m=3
输出:3
算法:
使用 STL list 类型模拟圆圈。
#include <list>
class Solution {
public:
int lastRemaining(int n, int m)
{
if(n<1 || m <1)
return -1;
int i =0;
list<int> numbers;
for(i=0; i<n; i++)
numbers.push_back(i);
list<int >::iterator current = numbers.begin();
while(numbers.size()>1)
{
for(i=1;i<m;i++)
{
current++;
if(current == numbers.end())
current = numbers.begin();
}
list<int >::iterator next = ++current;
if(next == numbers.end())
next = numbers.begin();
current--;
numbers.erase(current);
current = next;
}
return *current;
}
};