Java 以字符串顺序查找重复项的复杂性
是否有人可以验证此代码的顺序复杂性是否为n(logn)?如果不是,你能解释一下你的答案吗?我真的很感谢你的帮助Java 以字符串顺序查找重复项的复杂性,java,Java,是否有人可以验证此代码的顺序复杂性是否为n(logn)?如果不是,你能解释一下你的答案吗?我真的很感谢你的帮助 public static boolean isDuplicate(String s){ char[] sArray = s.toCharArray(); for(int i=0;i<sArray.length/2;i++){ for(int j=sArray.length/2+1;j<sArray.length;
public static boolean isDuplicate(String s){
char[] sArray = s.toCharArray();
for(int i=0;i<sArray.length/2;i++){
for(int j=sArray.length/2+1;j<sArray.length;j++){
if(sArray[i] == sArray[j])
return true;
}
}
return false;
}
公共静态布尔值isDuplicate(字符串s){
char[]sArray=s.toCharArray();
对于(int i=0;iNo,它不是,它是O(n^2),因为您在外循环中迭代整个数组,对于i
的每个值,您也在内循环中迭代整个数组。将数组一分为二的事实不会改变顺序复杂性
如果要使用O(n*log(n))算法查找重复项,可以对数组进行排序,并在相邻位置检查重复项,如下所示:
public static boolean isDuplicate(String s){
char[] sArray = s.toCharArray();
Arrays.sort(sArray); // O(n*log(n))
for (int i=0; i<sArray.length-1; i++) // O(n)
if (sArray[i]==sArray[i+1])
return true;
return false;
}
这里的日志在哪里?我想这是O(n^2)验证这个代码是否是O(n log(n))…不,不是。
public static boolean isDuplicate(String s){
HashSet<Character> alreadySeenChars = new HashSet<Character>();
char[] sArray = s.toCharArray();
for (int i=0; i<sArray.length; i++) { // O(n)
if (alreadySeenChars.contains(sArray[i])) // O(1)
return true;
alreadySeenChars.add(sArray[i]); // O(1)
}
return false;
}