532--数组中的 k-diff 数对(技巧+感悟)
题目
给定一个整数数组和一个整数 k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。
这里将 k-diff 数对定义为一个整数对 (nums[i], nums[j]),并满足下述全部条件:
0 <= i < j < nums.length
|nums[i] - nums[j]| == k
注意,|val| 表示 val 的绝对值。
题解
点击查看代码
package Com.Xu.DoublePointer;
import java.util.HashMap;
import java.util.Map;
public class FiveThreeTwp {
public static int findPairs(int[] nums, int k) {
Map<Integer,Integer> map=new HashMap<>();
int times=0;
// for(int i=0;i<nums.length;i++){
// if(map.containsKey(nums[i])){
// map.put(nums[i],map.get(nums[i])+1);
// }
// else {
// map.put(nums[i],1);
// }
// }
for (int i : nums)
map.put(i,map.getOrDefault(i,0)+1);
int res=0;
if(k==0){
for (int i : map.values())
if(i>0) res++;
}
else {
for (int i : map.keySet())
if(map.containsKey(i+k)) res++;
}
// for(int i=0;i<nums.length;i++){
// int num = Math.abs(nums[i] - k);
// if(map.containsKey(num)){
// if(num==nums[i]){
// if(map.get(num)!=1){
// times++;
// continue;
// }
// }
// times++;
// }
// }
// return times;
return res;
}
public static void main(String[] args) {
int [] nums=new int[]{3, 1, 4, 1, 5};
int k=2;
System.out.println(findPairs(nums,k));
}
}
思考
代码是越简洁越好,像if语句如果没有else用简写非常好看。
做题就需要技巧的,笨办法也能解决,但是时间不可以行,所以做题是需要往技巧的方向发展的。
map的getorDefault方法非常好,所以以后要多用
分类讨论是一个做题方法不是个技巧不要瞧不起,所以以后有什么阻碍,先看看能不能先分类讨论。
以后要拿出固定地时间来看别人地解法,即使是题目做对了