【发布时间】:2021-09-15 21:02:47
【问题描述】:
给定一些数字数组,即 [5,11,13,26,2,5,1,9,...]
这些循环的时间复杂度是多少?第一个循环是 O(n),但第二个循环是什么?它迭代数组中每个索引处指定的次数。
for (int i = 0; i < nums.size(); i++) {
for (int j = 0; j < nums[i]; j++) {
// ...
}
}
【问题讨论】:
-
i < nums[i]?错字? ->j < nums[i]?如所写,内部循环将有 0 次或无限次迭代 -
称它为
O(NK)其中K是数组的平均值? -
当你使用
nums[i]时,复杂性是不确定的,因为可能有一个像[5,1000000,10000000,10000000,....]这样的数组 -
大 O 时间复杂度始终是一个角度问题。如果您将元素值的平均值视为一个常数或受某个常数(肯定是)的限制,那么总复杂度为
O(nums.size) -
@463035818_is_not_a_number 是的,这是一个错字,我更新了问题。谢谢。
标签: c++ time-complexity complexity-theory