运行此代码

时间:2016-04-09 02:26:52

标签: runtime big-o space-complexity

我在确定CTC问题上提出的这个解决方案的大问题时遇到了一些麻烦 空间复杂度应为O(1) 但是运行时间是O(N)吗?由于while循环,它似乎更倾向于O(N ^ 2)。但for循环对于for循环中的每个元素都没有运行N次。

public static int[] missing_two(int [] n){

        for(int i=0;i<n.length;i++){
            while(n[i]!=i){
                int temp=n[i];
                n[i]=n[n[i]];
                n[temp]=temp;
            }
        }

    }

6,0,1,2,3,4,5会是最坏情况的例子吗? while循环将在第一个索引上运行n次。然后是0。因此,不应该是O(2n)=&gt;为O(n)?

1 个答案:

答案 0 :(得分:1)

我的理解是大O符号用于给出上限或最坏情况。你必须要做的问题是:输入向量n是否具有这样的值,至少在一种情况下,对于输入向量n中的所有值,while循环是否完全执行?然后一个正确的Big O表示法将是O(N ^ 2),如果不是,但是接近,那么我猜O(N ^ 2)仍然是比O(N)更好的估计,因为上限的O(N)本来就已经超过了。

既然您已经编辑了问题并提供了更多相关信息,我同意您的看法。它是O(N)

相关问题