两数之和 - 不同组成

题目:

描述
给一整数数组, 找到数组中有多少组 不同的元素对 有相同的和, 且和为给出的 target 值, 返回对数.

样例
例1:
输入: nums = [1,1,2,45,46,46], target = 47 
输出: 2
解释:
1 + 46 = 47
2 + 45 = 47

例2:
输入: nums = [1,1], target = 2 
输出: 1
解释:
1 + 1 = 2

解题思路:和三数之和类似

public class Solution {
    /**
     * @param nums: an array of integer
     * @param target: An integer
     * @return: An integer
     */
    public int twoSum6(int[] nums, int target) {
        // write your code here

        if(nums.length == 0 || nums.length == 1) {
            return 0;
        }


        Arrays.sort(nums);

        int i = 0, j = nums.length - 1, ans = 0;
        while(i < j) {
            int sum = nums[i] + nums[j];
            if(sum == target) {
                ans++;
                i++;
                while(i < j && nums[i] == nums[i - 1]) {
                    i++;
                }
                
                j--;
                while(i < j && nums[j] == nums[j + 1]) {
                    j--;
                }
            } else if(sum > target) {
                j--;
                while(i < j && nums[j] == nums[j + 1]) {
                    j--;
                }
                
            } else {
                i++;
                while(i < j && nums[i] == nums[i - 1]) {
                    i++;
                }
            }
        }

        return ans;
    }
}