繁体   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