可以利用一个向量直接求解
代码如下:
class Solution {
public:
int LastRemaining_Solution(int n, int m) {
if(0==n) return -1;
vector<int> array;
for(int i = 0; i<n;++i)
{
array.push_back(1);
}//孩子在用1表示出圈了用0表示
int k = 0;//循环的时候用来在向量中循环的下标变量
for(int j = 0; j<n-1;++j)//循环次数为n-1次,最终向量中只剩下1个元素为1 这个元素就是最终的幸运儿
{
for(int w = 0;w!=m;k++) //w为每圈计数变量
{
if( n == k )
k=0;//用来设置首尾循环
if(1== array[k]) //向量中改位置为1说明该位置孩子还在,计数加一
w++;
if(m==w)
array[k]=0; //数完一圈,把计数w为m的位置置0
}
}
for(int i = 0;i<n;i++)
if(1== array[i])
return i; //返回最终向量组中仍为1的下标位置
return 0;
}
};
京公网安备 11010502036488号