class Solution
{
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param m int整型
* @return int整型
*/
int LastRemaining_Solution(int n, int m)
{
list<int> nums;
for(int i = 0; i < n; ++i) nums.push_back(i);
auto it = nums.begin(); // 迭代器模拟指针, 指向当前起始位置
while(nums.size() > 1)
{
for(int i = 0; i < m - 1; i++)
{
it++;
if(it == nums.end()) it = nums.begin(); // 循环链表, 到末尾回到开头
}
// 删除当前节点, it 自动指向下一个节点的位置 (或重新定位, 因 list 删除后迭代器失效需处理, 不过 C++11 后可简化)
it = nums.erase(it);
if(it == nums.end()) it = nums.begin(); // 若删到末尾, 重置到开头
}
return *nums.begin();
}
};
使用 list 链表进行模拟!!!

京公网安备 11010502036488号