fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. String line = scanner.nextLine();
  7. int target = scanner.nextInt();
  8.  
  9. // 用 \\s+ 兼容多个空格;其余保持不变
  10. String[] parts = line.trim().split("\\s+");
  11. int n = parts.length;
  12. int[] A = new int[n];
  13. for (int i = 0; i < n; i++) {
  14. A[i] = Integer.parseInt(parts[i]);
  15. }
  16.  
  17. Map<Integer, List<Integer>> map = new HashMap<>();
  18. List<int[]> pairs = new ArrayList<>();
  19.  
  20. for (int j = 0; j < n; j++) {
  21. int need = A[j] - target;
  22. if (map.containsKey(need)) {
  23. List<Integer> indices = map.get(need);
  24. for (int i : indices) {
  25. pairs.add(new int[]{i, j});
  26. }
  27. }
  28.  
  29. // 只新增这段:同时处理 A[i] - A[j] == target 的情况
  30. int need2 = A[j] + target;
  31. if (map.containsKey(need2)) {
  32. List<Integer> indices = map.get(need2);
  33. for (int i : indices) {
  34. pairs.add(new int[]{i, j});
  35. }
  36. }
  37.  
  38. if (!map.containsKey(A[j])) {
  39. map.put(A[j], new ArrayList<>());
  40. }
  41. map.get(A[j]).add(j);
  42. }
  43.  
  44. System.out.print("[");
  45. StringJoiner sj = new StringJoiner(", ");
  46. for (int[] pair : pairs) {
  47. sj.add("(" + pair[0] + ", " + pair[1] + ")");
  48. }
  49. System.out.print(sj.toString());
  50. System.out.println("]");
  51. }
  52. }
  53.  
Success #stdin #stdout 0.2s 59020KB
stdin
2 11 14 14 17
3
stdout
[(1, 2), (1, 3), (2, 4), (3, 4)]