题目:
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.
Example 1:
Input: [3, 1, 4, 1, 5], k = 2 Output: 2 Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5).
Although we have two 1s in the input, we should only return the number of unique pairs.
Example 2:
Input:[1, 2, 3, 4, 5], k = 1 Output: 4 Explanation: There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).
Example 3:
Input: [1, 3, 1, 5, 4], k = 0 Output: 1 Explanation: There is one 0-diff pair in the array, (1, 1).
Note:
- The pairs (i, j) and (j, i) count as the same pair.
- The length of the array won't exceed 10,000.
- All the integers in the given input belong to the range: [-1e7, 1e7].
分析:
class Solution {
public int findPairs(int[] nums, int k) {
//给定数组,返回其数值对,两个数的绝对距离是k(即两数的差值的绝对值为k)
//要求:元素相同(顺序无关)的为一对,数组长度不超过10000,所有数的的范围为Integer范围
//解法1:暴力解法
//解法1:暴力解法
Arrays.sort(nums);
if(k<0) return 0;
int count=0;
for(int i=0;i<nums.length-1;i++){
//跳过相同的,该题需要考虑两种连续元素情况,相同元素只取一次
while(i<nums.length-2&&nums[i]==nums[i+2]){
i++;
}
for(int j=i+1;j<nums.length;j++){
while(j!=nums.length-1&&nums[j]==nums[j+1]){
j++;
}
if(nums[j]-nums[i]==k){
//表明在相同元素边界倒数2个,下次i直接从不同的元素开始
if(k==0){i++;}
count++;
break;
}else if(nums[j]-nums[i]>k){
break;
}else if(nums[i]==nums[j]){
//为了下一次i从不同元素开始
i++;
}
}
}
return count;
}
}