题解 | #数组分组#
数组分组
http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
int n = in.nextInt();
ArrayList<Integer> list = new ArrayList();
int sum3=0, sum5=0, sum=0;
for(int i=0;i<n;i++){
int t = in.nextInt();
if(t%5 == 0){
sum5 += t;
}else if(t%3 == 0){
sum3 += t;
}else{
sum += t;
list.add(t);
}
}
int targe = Math.abs(sum5-sum3); // 按5的倍数和3的倍数分组时,两组的差值targe
if(sum == targe){ // 差值与剩余数的总和相等,即可以分组,直接把所有的数放在较小值那一组即可
System.out.println("true");
continue;
}
System.out.println(Judge(list,targe));
}
}
//************************************************ 判断是否可分组
// 把剩余数按所有情况分组,当两组的差值与targe相等时,即可正确分组
public static boolean Judge(ArrayList<Integer> list, int targe){
for(int i=0;i<list.size()-1;i++){
for(int j=i+1;j<list.size();j++){
List<Integer> list1 = list.subList(i,j); // 将list分为两组,list1和(list2+list3)
List<Integer> list2 = list.subList(0,i);
List<Integer> list3 = list.subList(j,list.size());
if(Math.abs(Sum(list1)-Sum(list2)-Sum(list3)) == targe){ // 当两组的差值等于targe时,可以正确分组
return true;
}
}
}
return false;
}
//************************************************ 计算总和
public static int Sum(List<Integer> list){
int sum = 0;
for(int i=0;i<list.size();i++){
sum += list.get(i);
}
return sum;
}
}
查看7道真题和解析