两个嵌套循环的复杂性并不总是运行

时间:2016-01-18 14:14:45

标签: java loops time-complexity

我需要写一个复杂程度最低的答案。我的问题是关于并不总是运行的嵌套循环。我有一个for循环,迭代N次,取决于字符串的长度,并搜索'char'值。当它找到它时,它会从此时起再次迭代循环,寻找更多的“char”值。  我写了以下方法:

public static int subStrMaxC(String s, char c, int k) {
    char[] stringChars=new char[s.length()];
    //System.out.print("the string of the characters is");
    for(int i=0;i<stringChars.length;i++) {
        stringChars[i]=s.charAt(i);
    //  System.out.print(stringChars[i]);
    }
    int count=0;
    int bigcount=0;
    int[] charArray=new int[s.length()];
    for(int i=0;i<stringChars.length;i++) {
            count=0;
            if(stringChars[i]=='c') {
                count++;
                for(int j=i+1;j<stringChars.length;j++) {
                      if(stringChars[j]=='c') {
                            count++;
                            if((count>=2)&&(count<=k+2)) {
                                bigcount++;
                                if(count==k+2) {
                                    count=0;
                                    j=stringChars.length-1;
                                }
                            }
                      }
                }
            }
    }
    return bigcount;
}

由于第二个循环不迭代,除非第一个循环找到满足条件的值,我不知道复杂性是否定义为O(n ^ 2) - 这是我的假设,因为第二个循环可以,最糟糕的情况是运行N *(Ni)次 - 或者只是O(n),这正是我正在寻找的。 谢谢!

2 个答案:

答案 0 :(得分:0)

我很确定这是你能做的最好的,但当然我可能错了。您的方法遇到的问题是您对Space Complexity的使用有限。使用下面的方法,您只需遍历字符串一次(即没有&#39; j&#39;循环导致n平方问题)。在这里,您可以使用空间/内存构建候选子串。现在,您只需迭代候选子串,其时间复杂度远低于第一种方法。

(?is)\b(?:from|into|update)\s+(\w+)

答案 1 :(得分:0)

O(n)最好的情况, O(n 2 )最坏的情况

我不确定你的意思是最不复杂的。如果你指的是最好的情况,那就是O(n)性能。 (由于匹配的情况:

,父循环仅迭代,嵌套循环从不迭代)
if(stringChars[i]=='c')

总是假的。然而,由于条件{{1}这一事实,我们通常所指的最坏情况时间复杂度是O(n 2 )。每次都会返回if(stringChars[i]=='c')