剑指 Offer 62. 圆圈中最后剩下的数字
思路:数学
[0,1,2,3,4]
每次删除第m个数,反推:
第四次反推:补上m个位置,模上当前数组大小2
第三次反推:补上m个位置,模上当前数组大小
…
总结,就是(index+m)%当前数组大小
class Solution {
public:
int lastRemaining(int n, int m) {
int res=0;
for(int i=2;i<=n;++i){
res=(res+m)%i;
}
return res;
}
};
时间复杂度 O(n)
空间复杂度 O(1)