剣は申し出を指します—57。Sの2つの数字—分析とコード(Java)

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、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/111875247