Given an array of integers, find how manyunique pairsin the array such that their sum is equal to a specific target number. Please return the number of pairs.
Example
Given nums =[1,1,2,45,46,46], target =47
return2
1 + 46 = 47
2 + 45 = 47
Note
这里关键是去重!
while (left < right && nums[left] == nums[left -1]) { left++; }while (left < right && nums[right] == nums[right +1]) { right--; }
Code
publicclassSolution { /** * @param nums: an array of integer * @param target: An integer * @return: An integer */publicinttwoSum6(int[] nums,int target) {// write your code hereif (nums ==null||nums.length<2) {return0; }Arrays.sort(nums);int res =0;int left =0, right =nums.length-1;while (left < right) {int sum = nums[left] + nums[right];if (sum == target) { res++; left++; right--;while (left < right && nums[left] == nums[left -1]) { left++; }while (left < right && nums[right] == nums[right +1]) { right--; } } elseif (sum > target) { right--; } else { left++; } }return res; }}