LIOR:
私はこのコードを持っています:
public static int compare(String s1, String s2) {
int n = Math.min(s1.length(), s2.length());
for (int i = 0; i < n; i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
int diff = c1 - c2;
if (diff != 0) {
return diff;
}
}
return s1.length() - s2.length();
}
public static boolean exists(String word, String[] dict) {
int left = 0;
int right = dict.length-1;
while (left <= right) {
int middle = (left + right) / 2;
int comparison = compare(dict[middle], word);
if (comparison < 0) {
left = middle+1;
}
else if (comparison > 0) {
right = middle-1;
} else {
return true;
}
}
return false;
}
私は存在している機能の複雑さを計算する必要があります。
I Nは、アレイ内の要素の数であり、Kは、単語内の文字の数でありながら、それは、O(K * logN個)だと述べました。
答えはO(logN個)で、それは私が含まれるようになっていませんでした意味はcompare
、私の計算では、関数の複雑さを?
コーダ:
あなたのアルゴリズムが実行されるO(logn)
場所回n = dict.length
とすべての反復のためにそれが必要とするO(K)
ところK
である最大(*)の単語の長さ。したがって乗法原則(または使用した製品のルールを、自分のアルゴリズムが必要でO(K*logn)
、時間の複雑さを。
(*)上記私はあなたの関数内であなたがmath.minを使用していますが、二番目に大きいとの最大の単語を比較し、両方がある場合を考えていても最大の長さを述べたO(K)
ことがありますので、最悪のシナリオでは、長さのO(maximum length)
。