借助集合将复杂度降到n2,但耗时还是比较长。 import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-07 8:40
* @Description:给定一个整数数组,判断其中是否有3个数和为N
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String ss[] = sc.nextLine().split(",");
int N = Integer.valueOf(ss[1]);
String[] s = ss[0].split(" ");
int arr[] = new int[s.length];
for (int i = 0; i
arr[i] = Integer.valueOf(s[i]);
HashSet set = new HashSet<>();
for (int i = 0; i
int target = N - arr[i];
for (int j = 0; j
if (j == i) continue;
if (set.contains(target - arr[j])){
System.out.println("True");
return;
}
set.add(arr[j]);
}
set.clear();
}
System.out.println("False");
}
}
比较好的方法是先排序,同样把三数和问题转化为两数和问题。
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-07 11:56
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String ss[] = sc.nextLine().split(",");
int N = Integer.valueOf(ss[1]);
String[] s = ss[0].split(" ");
int arr[] = new int[s.length];
for (int i = 0; i
arr[i] = Integer.valueOf(s[i]);
Arrays.sort(arr);
int target, l, r;
for (int i = 0; i
target = N -arr[i];
l = i + 1;
r = s.length - 1;
while (l
if (arr[l] + arr[r] == target){
System.out.println("True");
return;
}else if (arr[l] + arr[r] > target)
r--;
else
l++;
}
}
System.out.println("False");
}
}