程序员面试金典-面试题 16.24. 数对和

题目:

设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。

示例 1:

输入: nums = [5,6,5], target = 11
输出: [[5,6]]

示例 2:

输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]

提示:

  • nums.length <= 100000

分析:

现将数组排序,然后双指针从前后一起遍历,判断两个数的和和目标数的关系,从而移动指针。

程序:

class Solution {
    public List<List<Integer>> pairSums(int[] nums, int target) {
        Arrays.sort(nums);
        List<List<Integer>> res = new ArrayList<>();
        int i = 0, j = nums.length - 1;
        while(i < j){
            if(nums[i] + nums[j] == target){
                List<Integer> r = new ArrayList<>();
                r.add(nums[i]);
                r.add(nums[j]);
                res.add(r);
                i++;
                j--;
            }else if(nums[i] + nums[j] < target){
                i++;
            }else{
                j--;
            }
        }
        return res;
    }
}

猜你喜欢

转载自www.cnblogs.com/silentteller/p/12518707.html