两数之和 - 不同组成
题目:
描述
给一整数数组, 找到数组中有多少组 不同的元素对 有相同的和, 且和为给出的 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;
}
}