2 つのソートされた配列を効率的にマージする方法
最近のインタビューで、2 つのソートされた配列を 1 つのソートされた配列にマージするように求められました。要素を比較して新しい配列に追加するソリューションを提供しました。このアプローチは正しいですが、パフォーマンスを向上させるために最適化することができます。
より効率的なソリューションは次のとおりです:
public static int[] merge(int[] a, int[] b) { int[] answer = new int[a.length + b.length]; int i = 0, j = 0, k = 0; while (i < a.length && j < b.length) { answer[k++] = a[i] < b[j] ? a[i++] : b[j++]; } while (i < a.length) answer[k++] = a[i++]; while (j < b.length) answer[k++] = b[j++]; return answer; }
最適化されたソリューションでは、単一のループを使用して両方の配列を反復処理し、マージします。それらを回答配列に追加します。三項演算子 (? :) を使用すると、追加の条件ステートメントを必要とせずに、より小さい要素を決定し、それを回答配列に追加できます。
さらに、k を使用して、その後、回答配列のインデックスをインクリメントします。各要素が追加され、コードが簡素化され、操作の数が削減されます。
元のソリューションと比較して、この最適化されたバージョンはより簡潔で、より少ない条件チェックで実行されます。効率が向上します。
以上がソートされた 2 つの配列を効率的にマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。