可能看过对时间复杂度的描述:
O(1),O(n),O(lgn),O(nlogn),O(n^)
大O描述的是算法的运行时间和输入数据之间的关系
让我们来看个例子
public static int sum(int[] nums){
int sum = 0;
for (int num :
nums) {
sum += num;
}
return sum;
}
此时时间复杂度为O(n)
n是nums中的元素个数
算法和n成线性关系
为什么要用大O,叫做O(n)
因为忽略了常数.
实际时间T=c1*n + c2
这个算法中,c1可以理解为对数的操作花费的总时间
将nums中的数取出来, 把sum这个数取出来
c2可以理解为开辟空间,初始化,return花费的总时间
添加操作的时间复杂度(最坏情况)
addLast(e) O(1)
addFirst(e) O(n)
add(index,e) O(n/2) = O(n)
整体是O(n)
删除操作的时间复杂度
removeLast(e) O(1)
removeFirst(e) O(n)
remove(index,e) O(n/2)= O(n)
整体是O(n)
修改操作的时间复杂度
set(index,e) O(1)
查询操作的时间负责度
get(index) O(1)
contains(e) O(n)
find(e) O(n)
总结:
增: O(n)
删: O(n)
改: 已知索引O(1);未知索引O(n)
查: 已知索引O(1);未知索引O(n)