方法1: 二分 复杂度O(n)

import java.util.ArrayList;
import java.util.Arrays;

public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++) {
            if (array[i] > sum) {
                break;
            }
            // Arrays.binarySearch返回值:
            // 若找到元素,则返回该元素下标;否则返回-(插入点)-1
            int ans = Arrays.binarySearch(array, i + 1, array.length, sum - array[i]);
            if (ans >= 0) {
                list.add(array[i]);
                list.add(array[ans]);
                break;
            }
        }
        return list;
    }
}

方法2: 首尾指针 复杂度O(n)

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {

        ArrayList<Integer> list = new ArrayList<Integer>();
        int l = 0, r = array.length - 1;
        while (l < r) {
            if (array[l] + array[r] == sum) {
                list.add(array[l]);
                list.add(array[r]);
                break;
            } else if (array[l] + array[r] > sum) {
                r--;
            } else {
                l++;
            }
        }
        return list;
    }

}