时间复杂度和列表中的 add()
Time complexity and add() in list
这是一个算法。因为它只是一个 for 循环,所以我认为它是 O(N),但有人告诉我它是 O(N2)。有人告诉我这是因为 list.add,但这不会改变 N?那么为什么时间复杂度会发生变化?
public static void mystery3(List<String> list) {
for (int i = 0; i < list.size() - 1; i += 2) {
String first = list.remove(i);
list.add(i + 1, first);
}
}
如果您使用数组 (Arraylist),remove(i)
需要 O(n),而 add(...)
需要 O(n)。这是因为在索引 i 处查找元素需要 O(1),但调整大小需要 O(n)。
如果使用链表,remove(i)
需要 O(n),`add(...) 需要 O(n)。这是因为在索引 i 处查找元素需要 O(n) 并且删除需要 O(1).
由于您调用方法 n/2 次,其整个运行时间为 O(n^2)。
这是一个算法。因为它只是一个 for 循环,所以我认为它是 O(N),但有人告诉我它是 O(N2)。有人告诉我这是因为 list.add,但这不会改变 N?那么为什么时间复杂度会发生变化?
public static void mystery3(List<String> list) {
for (int i = 0; i < list.size() - 1; i += 2) {
String first = list.remove(i);
list.add(i + 1, first);
}
}
如果您使用数组 (Arraylist),remove(i)
需要 O(n),而 add(...)
需要 O(n)。这是因为在索引 i 处查找元素需要 O(1),但调整大小需要 O(n)。
如果使用链表,remove(i)
需要 O(n),`add(...) 需要 O(n)。这是因为在索引 i 处查找元素需要 O(n) 并且删除需要 O(1).
由于您调用方法 n/2 次,其整个运行时间为 O(n^2)。