面试题答案
一键面试-
时间复杂度分析:
- 对于
for
循环部分,循环次数为vec.size()
,即1000次。每次循环执行vec[i] = i
,这里访问vec[i]
操作的时间复杂度为 $O(1)$,因为vector
内部采用连续内存存储元素,通过索引直接访问元素的时间是固定的。所以整个for
循环的时间复杂度为 $O(n)$,其中 $n = vec.size() = 1000$。 - 对于
int value = vec[500];
这一行,同样是通过索引访问vector
中的元素,由于vector
是连续内存存储,通过索引直接访问的时间复杂度为 $O(1)$。
- 对于
-
综合分析:
-
整个代码中访问
vector
元素(包含for
循环中的访问和单独的vec[500]
访问),主要的时间消耗在for
循环部分,其时间复杂度为 $O(n)$。所以从访问vector
元素的角度看,整体时间复杂度为 $O(n)$。 -
原因是:
vector
内部实现是基于数组,在连续内存空间存储元素。通过索引[]
操作符访问元素时,根据索引值直接计算内存地址并获取元素,这个过程不依赖于元素个数 $n$,时间消耗是固定的,为 $O(1)$。但由于有一个循环遍历了vector
的所有元素,所以整体访问vector
元素的时间复杂度由这个循环主导,为 $O(n)$。
-