可以利用一个向量直接求解
代码如下:
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; } };