二分解法
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] s = br.readLine().split(" ");
int n = Integer.parseInt(s[0]), m = Integer.parseInt(s[1]);
int[] arr = new int[n];
s = br.readLine().split(" ");
for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(s[i]);
Arrays.sort(arr);
boolean isFind = false;
for (int i = 0; i < n; i++) {
int a = arr[i];
int b = m - a;
int l = i + 1, r = n - 1;
while (l < r) {
int mid = l + r + 1 >> 1;
if (arr[mid] <= b) {
l = mid;
} else {
r = mid - 1;
}
}
if (l < n && arr[l] == b) {
bw.write(a + " " + arr[l]);
isFind = true;
break;
}
}
if (!isFind) bw.write("No Solution");
bw.flush();
br.close();
bw.close();
}
}
哈希表解法
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] s = br.readLine().split(" ");
int n = Integer.parseInt(s[0]), m = Integer.parseInt(s[1]);
Map<Integer, Integer> map = new HashMap<>();
s = br.readLine().split(" ");
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
int t = Integer.parseInt(s[i]);
arr[i] = t;
map.put(t, map.getOrDefault(t, 0) + 1);
}
Arrays.sort(arr);
boolean isFind = false;
for (int i = 0; i < n; i++) {
int a = arr[i], b = m - a;
if (map.containsKey(b)) {
if (a != b || map.get(b) >= 2) {
isFind = true;
bw.write(a + " " + b);
break;
}
}
}
if (!isFind) bw.write("No Solution");
bw.flush();
br.close();
bw.close();
}
}