私は本当に興味深いプログラミング課題を解決しようとしています。ここにある:バイナリ検索が失敗した場合の検索
書き込みリストとターゲット合計与えられ、合計 目標合計に等しい任意の二つの異なる要素の ゼロベースのインデックスを返す関数。そのような要素がない場合、関数は を返します。 例えば、findTwoSum(新しいINT [] {1、3、5、7、9}、12)インデックスの次のタプルのいずれかを返さなければならない:
1, 4 (3 + 9 = 12) 2, 3 (5 + 7 = 12) 3, 2 (7 + 5 = 12) 4, 1 (9 + 3 = 12)
は、単純な右であるべきか?だからここに私の機能があります:
public static int[] findTwoSum(int[] list, int sum) {
int[] indices = null;
for(int i = 0; i < list.length; i++) {
int currentNum = list[i];
int findNum = sum - currentNum;
int length = list.length;
int min = i;
int max = length-1;
while(max >= min) {
int guess = (max+min)/2;
if(list[guess] == findNum) {
return new int[] {i,guess};
}
if(list[guess] < findNum) {
min = guess + 1;
}
if(list[guess] > findNum) {
max = guess - 1;
}
}
}
return indices;
}
コードは、非常に単純である、配列内のすべての要素のために、それは彼らの合計が提供sum
に等しくなるように、バイナリ検索、別の要素を使用して検索しようとします。私はこのコードをテストしたところ、提供された配列がソートされていると仮定して、失敗したシナリオを見つけることができませんでした。しかし、TestDomeでこのコードを実行すると、最後のケースが失敗し、何とか間違った解決策になります。誰もこのアプローチで何が間違っているかを指摘できますか?
質問は、あなたのコードが処理していないようですこれは、リストの2つの_distinct_要素を要求正しく。 – Gassa
@Gassaええ、私はそれについてもチェックしました、それは本当に助けにはなりませんでした。私が今考えているのは、配列が最後のケースでソートされていない可能性があるということです。 – Zed
指定されたリストはすでにソートされた形式ですか? –