簡體   English   中英

兩個嵌套循環的運行時復雜度:二次還是線性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM