このCodingBat の問題を解決しようとしています:
文字列の 2 つの配列 A と B から始めます。それぞれの要素はアルファベット順で、重複はありません。2 つの配列から最初の N 要素を含む新しい配列を返します。結果の配列はアルファベット順で、重複がない必要があります。A と B は両方とも N 以上の長さになります。最良の「線形」ソリューションは、A と B に対して単一のパスを作成し、それらがアルファベット順であるという事実を利用して、要素を新しい配列に直接コピーします。
mergeTwo({"a", "c", "z"}, {"b", "f", "z"}, 3) → {"a", "b", "c"}
mergeTwo({"a", "c", "z"}, {"c", "f", "z"}, 3) → {"a", "c", "f"}
mergeTwo({"f", "g", "z"}, {"c", "f", "g"}, 3) → {"c", "f", "g"}
試み:
public String[] mergeTwo(String[] a, String[] b, int n) {
String[] op = new String[a.length + b.length];
for (int i = 0; i < a.length; i++) {
op[i] = a[i];
}
int j = 0;
for (int i = 0; i < op.length; i++) {
if (op[i] == null) {
j = i;
break;
}
}
for (int i = 0; i < b.length; i++) {
op[j] = b[i];
j++;
}
Arrays.sort(op);
ArrayList<String> help = new ArrayList<String>();
for (int i = 0; i < op.length - 1; i++) {
if (op[i] != op[i + 1]) {
help.add(op[i]);
}
}
String[] res = new String[help.size()];
for (int i = 0; i < help.size(); i++) {
res[i] = help.get(i);
}
String[] op2 = new String[n];
for (int i = 0; i < n; i++) {
op2[i] = res[i];
}
return op2;
}
したがって、問題は、1 つを除いてすべてのテストがパスすることです。
何故ですか?