[英]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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.