题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
先算出3或5倍数的总合、所有数的总和,并把非35倍数的数挑出来。
再算这些数能不能凑出sum / 2 - sum3来
可以弄个可凑set,依次对所有非35倍数的数,把这个数和这个数+set中任意数,都加入set,最终判断set中有无需要的数。
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
read.readLine();//不需要这个n
String[] s = read.readLine().split(" ");
List<Integer> nums1 = new ArrayList<>();
int sum = 0, sum3 = 0, sum5 = 0;
for (String ss : s) {
int num = Integer.parseInt(ss);
sum += num;
if (num % 5 == 0) {
sum5 += num;
} else if (num % 3 == 0) {
sum3 += num;
} else {
nums1.add(num);
}
}
if (sum % 2 != 0) {
System.out.println("false");
return;
}
sum /= 2;
if(sum == sum3 || sum == sum5) {
System.out.println("true");
return;
}
sum -= sum3;
Set<Integer> set = new HashSet<>();
for (Integer num : nums1) {
List<Integer> newMember = new ArrayList<>();
newMember.add(num);
for (Integer oldMember : set) {
newMember.add(num + oldMember);
}
set.addAll(newMember);
}
if (set.contains(sum)) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
查看18道真题和解析