我最近了解了Juggling算法如何在线性时间内旋转数组
template<class Array, std::size_t N = std::tuple_size<Array>::value>
constexpr std::size_t countof(Array&) { return N; }
&#13;
时间复杂度如何线性?
答案 0 :(得分:0)
leftRotate(int arr[], int d, int n)
中的循环make
完全gcd(d, n)
次迭代。O(log(d)+log(n))
。k
% gcd(d, n) == i
的所有单元格arr [k]并交换它们。n / gcd(d, n)
个单元格,它是交换的数量
这个函数将在循环的一次迭代中生成。因此函数的整个渐近时间复杂度是 将是
O(gcd(d, n) * n / gcd(d, n))
O(n)
“线性”。