Мне нужно написать ответ с наименьшей степенью сложности. Мои вопросы касаются вложенных циклов, которые не всегда выполняются. У меня есть цикл 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), что и есть то, что я ищу. Спасибо!
Big O означает наихудший случай, т.е. когда все работает –
сложность здесь O (N^2), вы уверены, что код верен? Я думаю, что буквальный «c» должен быть c. –
Пожалуйста, объясните, что должен делать ваш метод. Текущая сложность - O (n2), но когда вы объясняете свою задачу, мы, вероятно, можем сказать, как вы можете достичь сложности O (n). –