题目大意:点击打开链接
public int findPairs(int[] nums, int k) {
if(nums==null||nums.length==0||k<0){
return 0;
}
Map<Integer,Integer> map=new HashMap();
for(int i:nums){
map.put(i,map.getOrDefault(i,0)+1);
}
int count=0;
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;
}
步骤:
例如:int[ ] nums={4,3,5,6,3,7,4}; int k=2;
1. 把数组里的数装进map里,key是数组里每一个不重复值,值是出现的相应的次数
map里就有:
<4,2>
<3,2>
<5,1>
<6,1>
<7,1>
2. 用map里键和值的关系作为要遍历的对象
对于k=0的情况,只要刚才装好的map里的value>=2的都满足题目条件(例如举例中的4和3)
对于k的其他情况,只要刚才装好的map里的key+k还属于map里的键(就满足条件,例如举例中的4+2=6,6还是键,3+2=5,5+2=7都满足条件)
总结:
1.分析后要考虑到用Map, Set 等一些数据结构,不要只想着嵌套for loop
2.对于k,分几种情况讨论,以及每种情况下用什么方法达到目的是解题的核心
3.对于Map.Entry<Integer,Integer> entry=map.entrySet( ); 这种使用map里键值关系的方法一定要熟悉