两个嵌套循环的运行时间复杂性:二次型还是线性
Running-time complexity of two nested loops: quadratic or linear?
int Solution::diffPossible(vector<int> &A, int B) {
for (int i = 0; i < A.size(); i++) {
for (int j = i+1; j < A.size(); j++)
if ((A[j]-A[i]) == B)
return 1;
}
return 0;
}
这是一个简单问题的解决方案,在这个问题中,我们应该编写一个时间复杂度小于或等于O(n(的代码。我认为这个代码的时间复杂度是O(n^2(,但它仍然被接受了。所以,我有疑问,请告诉我正确的答案。
让我们分析最坏的情况,即当内部循环中if
-语句的条件(A[j]-A[i]) == B
从未满足,因此语句return 1
从未执行。
如果我们将A.size()
表示为n
,则对于外循环的第一次迭代,内环中的比较执行n-1
次,然后对于第二次迭代执行n-2
次,依此类推…
因此,对于这种最坏情况场景,在内部循环中执行的比较次数为(通过计算以下算术级数的总和(:
n-1 + n-2 + ... + 1 = (n-1)n/2 = (n^2 - n)/2
^ ^
|_________________|
n-1 terms
因此,运行时间复杂度是二次型的,即O(n^2(,而不是O(n(。
相关文章:
- 输出 0 和 -0 的二次公式,与给定的项无关
- 处理所有二次公式结果
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- Cgal二次规划目标函数
- 二次代数建议数组等返回功能
- 无法从数组二次表达式中检索数据值
- 创建二次公式求解器-范围中未声明的变量
- C++:你如何确定一个解是微不足道的还是不存在的二次函数?
- 如何将二次贝塞尔曲线代码转换为三次贝塞尔曲线
- 为什么使用STL排序()进行二次时间排序
- omp并行用于二次筛的无优化
- 分段故障:SET C++11中的二次排序
- C++识别以像素为单位的二次和三次显示
- 在 Vulkan 中加载非二次幂纹理
- C++二次码错误
- sqrt() 使用 <math.h) 在二次公式中的意外结果>
- 如何顺时针交换二次矩阵的四分之一(从左上角开始)
- 如何在C++中进行二维二次拟合
- 如何在次线性时间内从行主数组中选择列
- 编写二次公式程序时出现编译错误