题解 | #数组分组#

数组分组

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");
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务