题解 | #称砝码#

称砝码

https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

思路:依次遍历砝码,将砝码重量的组合存入到set中,对每一个砝码,都可以与之前已经存入set的重量组合再次进行组合,所以对于第i个砝码,需要先将前面i-1个砝码的重量组合先存入到临时tempSet中,再将其与第i个砝码进行组合的值放入set中

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            //依次读取砝码种数、重量、数量
            int n = Integer.parseInt(sc.nextLine().trim());
            String[] m = sc.nextLine().split("\\s+");
            String[] x = sc.nextLine().split("\\s+");

            //将砝码的重量按其个数存入list中
            ArrayList<Integer> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                int weight = Integer.parseInt(m[i]);
                int num = Integer.parseInt(x[i]);
                for (int j = 0; j < num; j++) {
                    list.add(weight);
                }
            }

            //用能自动去重的set来存放砝码的重量组合,先放入0到set中
            Set<Integer> set = new HashSet<>();
            set.add(0);

            //对存放砝码重量的list进行遍历
            for (int i = 0; i < list.size(); i++) {
                //对每一个砝码,都可以与已存入set的重量值进行组合(即将重量相加)
                //故先将原set的重量值复制到临时tempSet中,对其进行遍历
                Set<Integer> tempSet = new HashSet<>(set);
                for (int v : tempSet) {
                    set.add(v + list.get(i));
                }
            }

            //最终得到的set的大小即为重量组合的个数
            System.out.println(set.size());
        }
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-18 22:30
我看都是谁在卷前端!
秋盈丶:搜了下,20人的公司能收到2000份招呼?真有这么夸张吗
点赞 评论 收藏
分享
若怜君欢:驾驶证去掉吧,PPT啥的也去掉,本硕课程去掉,导师和研究方向去掉;加入本硕排名(好才写);技能栏加入你会的那些控制算法和滤波算法,这个比你会啥啥啥软件更有用;获奖写上去,奖学金啊,有没有专利啊之类的 电机和硬件这一块,属于传统制造业,制造业实习并不多。多投一些攒攒经验,有实习最好,没有也不需要焦虑(制造业实习其实除了转正,没多大用处) 最后,划重点,等秋招开始后,把你所有社交软件都发一份简历上去,并经常更新,找人内推你!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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