您的位置:首页 > 大数据 > 人工智能

LeetCode-532:K-diff Pairs in an Array (给定绝对值差的值对个数)

2017-10-20 09:37 501 查看

Question

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].

问题解析:

从给定数组中,找出所有差的绝对值为k的元素值对(i, j),返回元素值对的数量。

Answer

Solution 1:

HashMap实现。

由题目可以知道,同
LeetCode-1:Two Sum
类似,题中在map中找到
nums[i]+k
,就相当于找到了一对符合题目的值对;

首先给出没有值对,即符合条件的值对数量为0的情况;

nums
中的所有元素以 (value:number) 的map对对象,存储在map中;

遍历map中的元素,注意区分k为0和不为0的情况。

class Solution {
public int findPairs(int[] nums, int k) {
if (nums == null || nums.length == 0 || k < 0) return 0;

Map<Integer, Integer> map = new HashMap<>();
int count = 0;
for (int i : nums){
map.put(i, map.getOrDefault(i, 0) + 1);
}

for (Map.Entry<Integer, Integer> entry : map.entrySet()){
if (k == 0){
if (entry.getValue() >= 2){
count++;
}
}else{
if (map.containsKey(entry.getKey() + k)){
count++;
}
}
}
return count;
}
}


Runtime: 30 ms

Beats 58.44 % of java submissions

时间复杂度:O(n);空间复杂度:O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode 算法 Array