import java.util.Scanner; import java.util.TreeMap; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int c=scanner.nextInt(); int count=0; TreeMap<Integer, Integer> map=new TreeMap<>(); for (int i = 0; i < n; i++) { int a=scanner.nextInt(); map.put(a, map.getOrDefault(a, 0)+1); } for (Integer i : map.keySet()) { if(map.containsKey(i+c)) { count+=map.get(i+c)*map.get(i); } } System.out.println(count); } }
这题如果使用数组来暴力求解,一个测试用例都过不了,这道题应该用平衡二叉树,并且键来存数据,值来存个数。对于每一对符合条件的两个数,我们应该把它们的数量相乘,我一开始使用求最大值,竟然10个过了9个,笑了。