1.タイトル
昇順の配列と数値Sを入力します。合計が正確にSになるように配列内の2つの数値を見つけます。数値の複数のペアの合計がSに等しい場合は、2つの数値の最小の積を出力します。
出力の説明:
各テストケースに対応し、2つの数値を出力し、最小の数値が最初に出力されます。
2、分析とコード
1.ダブルポインター
(1)考える
配列の両端に2つのポインターを設計します。対応する数値の合計がSより小さい場合は、ヘッドポインターを後方に移動します。それ以外の場合は、合計がSになる2つの数値またはポインターが見つかるまでテールポインターを前方に移動します。
合計はSの2つの数です。距離が遠いほど、積は小さくなります。したがって、上記の方法で見つかった最初の数のペアが解です。
(2)コード
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> ans = new ArrayList<>();
if (array == null || array.length < 2)
return ans;
int l = 0, r = array.length - 1;
while (l < r && (array[l] + array[r] != sum)) {
if (array[l] + array[r] < sum)
l++;
else
r--;
}
if (l != r) {
ans.add(array[l]);
ans.add(array[r]);
}
return ans;
}
}
(3)結果
実行時間:16ms、占有メモリ:9308k。
3、その他
何もありません。