Find Pairs Sum Less Than Target

题目:
在一个很大的数组中找出a,b两个数,这两个数的和要小于等于一个x,求这种组合的个数。

解题思路:
这道题就是双指针可以解决的。

代码:



public class FindPairsSumLessThanTarget {

    public List<List<Integer>> find(int[] nums, int target){
        List<List<Integer>> rst = new ArrayList<>();
        if(nums == null || nums.length == 0){
            return rst;
        }
        Arrays.sort(nums);
        for(int i = 0; i <= nums.length - 2; i++){
            if(i != 0 && i <= nums.length - 2 && nums[i - 1] == nums[i]){
                i++;
            }
            int left = i;
            int right = nums.length - 1;
            while(left < right){
                int sum = nums[left] + nums[right];
                if(sum <= target){
                    List<Integer> list = new ArrayList<>();
                    list.add(nums[left]);
                    list.add(nums[right]);
                    rst.add(list);
                }
                right--;
                while(left <= right && nums[right] == nums[right + 1]){
                    right--;
                }
            }
        }
        return rst;
    }

    public static void main(String[] args){
        FindPairsSumLessThanTarget findPairsSumLessThanTarget = new FindPairsSumLessThanTarget();
        int[] nums = {1, 1, 2, 2, 3, 4, 5, 6, 7};
        List<List<Integer>> rst = findPairsSumLessThanTarget.find(nums, 8);
        System.out.println(rst);
    }

}



Comments

Popular Posts