给定一个数组 a [1,2,3,4,5,6,7,8,9,10] 假设我们有一个执行以下操作的算法:
for i in 0..a.length
for j in 0..a.length
...
这将具有 O(n^2) 的 Big O 运行时间,因为对于每个元素,它将遍历整个数组。
但是如果内部循环只从外部索引向前遍历呢?
for i in 0..a.length
for j in i..a.length
...
也就是说,相比之下,第一个算法将在每次迭代(外循环)时查看 n 个元素。第二个算法着眼于:
- 第一次迭代的 n 个元素
- 第二次迭代的 n-1 个元素
- 第三次迭代的 n-2 个元素
- ...
- 最后一次迭代的 1 个元素
在为这种算法计算 Big O 运行时间时,它仍然是 O(n^2) 吗?