簡體   English   中英

while循環中while循環的時間復雜度是多少?

[英]What is the time complexity for while loop inside a while loop?

 int i = 0, j = A.size() - 1;
    while (i < j) {
        while ((i < j) && (A[i] % 2 == 0)) ++ i;
        while ((i < j) && (A[j] % 2 == 1)) -- j;
        swap(A[i], A[j]);
        i ++; 
        j --;

我們可以從陣列的兩端進行掃描,如果不在適當的位置,可以交換它們。 為什么時間復雜度為O(N)而不是O(N * N)?

您可以重寫代碼以使其更清晰:

 int i = 0, j = A.size() - 1;
 while (i < j) {
   if (A[i] % 2 == 0) ++ i;
   else if (A[j] % 2 == 1) -- j;
   else {
     swap(A[i], A[j]);
     i++; 
     j--;
   }
 }

該算法的復雜度為O(N),因為在任何情況下,運算的數量將僅為ji倍。

在這里,外循環的任何迭代的內循環將執行ji次。

暫無
暫無

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

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