template <typename T>
void reverseVector(vector<T> &vec, int start, int end) {
if(start < end) {
char temp = vec[start];
vec[start] = vec[end];
vec[end] = temp;
reverseVector(vec, start + 1, end – 1); }
}
}
假设N = vec.size()这个方法的时间复杂度是多少?
假设我是正确的,获取和设置向量的时间为O(1)。因此,if语句中的前3行都是O(1)。然后,该方法递归地调用自身,并且每次函数变小时,迭代n(n-1)(n-2)......次。所以我的回答是这个方法的O(n!)。我是对的吗?
编辑:类似的语法,但带有链表
template <typename T>
void reverseLinkedList(list<T> &lst, int start, int end) {
if(start < end) {
char temp = lst[start];
lst[start] = lst[end];
lst[end] = temp;
reverseLinkedList(lst, start + 1, end – 1);
}
}
答案 0 :(得分:2)
那是O(n)
。
您交换元素n/2
次:(0与n-1),(1与n-2),...(n / 2 - 1与n / 2 + 1)