【HackerRank】Pairs
题目链接: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 }
分类:
HackerRank
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了