时间复杂度更少的其他方法
时间: 2023-08-10 07:34:06 浏览: 96
还有一种时间复杂度更低的方法,可以将问题转化为二进制形式,然后使用位运算实现。以下是使用 C++ 实现的代码示例:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int josephus(int n, int m) {
int res = 0;
for (int i = 1; i <= n; i++) {
res = (res + m) % i;
}
return res;
}
int main() {
long long n, m; // 注意数据范围,需要使用 long long 类型
while (cin >> n >> m) {
int k = log2(n);
int ans = m % n;
for (int i = 0; i < k; i++) {
if ((ans & (1 << i)) != 0) {
ans = (ans + (1 << (k + 1))) >> (k + 1);
ans |= (1 << i);
} else {
ans >>= (k + 1);
}
}
cout << ans + 1 << endl;
}
return 0;
}
```
这个方法的时间复杂度为 O(log n),可以通过本题。但是实现起来较为繁琐,需要注意细节。
阅读全文