题目链接:Pairs
完全就是Two Sum问题的变形!Two Sum问题是要求数组中和正好等于K的两个数,这个是求数组中两个数的差正好等于K的两个数。总结其实就是“骑驴找马”的问题:即当前遍历ar[i],那么只要看数组中是否存在ar[i]+K或者ar[i]-K就可以了,还是用HashMap在O(1)的时间完成这个操作。
题目有一点没说清楚的就是元素是否有重复,从Editorial来看似乎是没有重复,不过我还是用map的value记录了数出现的频率来处理了重复。
代码如下:
1 import java.util.*; 2 3 public class Solution { 4 public static void main(String[] args) { 5 Scanner in = new Scanner(System.in); 6 int n = in.nextInt(); 7 int k = in.nextInt(); 8 HashMap<Integer, Integer> map = new HashMap<Integer,Integer>(); 9 int[] ar = new int[n]; 10 for(int i = 0;i < n;i ++){ 11 ar[i] = in.nextInt(); 12 if(!map.containsKey(ar[i])) 13 map.put(ar[i], 0); 14 map.put(ar[i], map.get(ar[i])+1); 15 } 16 17 int answer = 0; 18 for(int i = 0;i < n;i ++){ 19 int up = ar[i]+k; 20 if(map.containsKey(up)) 21 answer += map.get(up); 22 int down = ar[i]-k; 23 if(map.containsKey(down)) 24 answer += map.get(down); 25 } 26 System.out.println(answer/2); 27 28 } 29 }