思路
设置一个状态数组,是否被选中过,一开始将所有数组元素置为1,然后只要被选中就置为0,分别设置一个num和count(初始值为0)计数,如果num的值等于m选中此位置,然后选中一个count加1,当count 等于 n-1 时跳出循环,最后为1的数就是最后留下来的
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
int status[1000];
int count=0,num = 0;
memset(status, 0, sizeof(status));
for(int i=1;i<=n;i++){
status[i] = 1;
}
if(n==0||m==0){
return -1;
}
// 用状态数组
while(count<n-1){
for(int i=1;i<=n;i++){
if(status[i]==1)
num++;
if(num == m){
status[i] =0;
count++;
num = 0;
}
if(count == n-1)
break;
}
}
int res=0;
for(int i=0;i<=n;i++){
if(status[i] == 1 )
res =i-1;
}
return res;
}
};


京公网安备 11010502036488号