思路1:
用list来进行模拟,然后进行删除,这种方式注意的是记得删除和迭代器++的时候注意转换为begin。
然后可以再过程中判断size和m的取余来加速错误,因为数从一开始到结束都是固定的,不能一直是0-8,0-7减少一个不是减少最大值
思路2:
通过找出递归公式:m=3
n == 1, f=0
n = = 2, f=1
n==3 ,f=1
f(n, m)=f ((n-1, m)+m)%n
就是少一位的被删除的index+m的结果然后再取余(防止溢出)就得到下一个的了。
代码:
int lastRemaining(int n, int m) {
if(n==1)
return 0;
int f=(lastRemaining(n-1, m)+m)%n;
return f;
}