普通解法:环形链表
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if(n < 1 || m < 1) return -1;
list<int> numbers;
for(int i = 0;i < n;i++) {
numbers.push_back(i);
}
list<int>::iterator current = numbers.begin();
while(numbers.size() > 1) {
for(int i = 0;i < m - 1;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;
}
};
高阶解法:找出递归公式,详细推导见《剑指offer》