【问题标题】:What is time complexity of following?跟随的时间复杂度是多少?
【发布时间】:2020-07-01 07:27:15
【问题描述】:
int j = 0;
       for(int i = 0; i < n; ++i) {
           while(j < n && arr[i] < arr[j]) {
               j++;
           }
       }

谁能用更直观的方式解释它的时间复杂度?

【问题讨论】:

    标签: algorithm loops time-complexity big-o nested-loops


    【解决方案1】:
       int j = 0;
       for(int i = 0; i < n; ++i) {
           while(j < n && arr[i] < arr[j]) {
               j++;
           }
       }
    

    在给定的代码中,变量j 的值在两个循环之外被初始化为0。在内部循环中,变量j 的值总是递增。如果arr[i] &lt; arr[j]j 的值增加1 否则内部循环的内容将被执行。请注意,j 的值永远不能超过 n。因此给定代码片段的复杂度总是O(n)

    【讨论】:

    • 是的,我认为如果您声明j 永远不会大于n,这将使答案更清楚。