我需要写一个复杂程度最低的答案。我的问题是关于并不总是运行的嵌套循环。我有一个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),这正是我正在寻找的。 谢谢!
答案 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')
。