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