2

サイズ N の配列があるとします (N は常に偶数です)。配列のすべての要素がペアを形成すると、追加すると同じ合計が得られます。合計を見つけます。これは絶対に宿題ではありません。例えば ​​:

A = {1,4,3,2,5,6,8,7} . ans = 9 は、{ (1,8) , (2,7) , (3,6) , (4,5) } が和 9 のペアを形成するためです。

重複することもあります。B = {3,4,5,3,4,5}。ans = 8

私が試したことは

1) 配列 = O(nlogn) をソートします。

2) ソートされた配列の最小値と最大値の合計を見つけます。これが必要な合計です。これは、これら 2 以外の場合、同じ合計で形成できないペアが少なくとも 1 つ存在するためです。私がはっきりしていることを願っています。

さて、私の質問ですが、これを線形時間で行うことはできますか? 「合計」は事前にわからないため、数値を直接ハッシュしても十分ではありません。

4

2 に答える 2

1

一連の数値を O(n) 回通過させて、最小値と最大値を見つけ、すべての数値をハッシュ テーブルに入れます。目標合計を計算しt = max + minます。次に、一連の数値を O(n) 回通過させます。number についてはx、 compute 、ハッシュ テーブルでy = t-x検索し、見つかった場合はペアを報告します。y重複に関しては、ハッシュ テーブルに数値のカウントを保持することもできます。

于 2013-09-20T01:26:02.900 に答える
0

配列の合計を求め、それを 2 倍にして で割りNます。

于 2013-09-20T03:53:10.360 に答える