题解 | #称砝码#

称砝码

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

看了别人的题解思路,才想出通过全部用例的逻辑的,自己原来的方法想破了脑袋也还是只能通过6/20的用例。。。😂😂

import java.util.*;
import java.lang.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int n = Integer.parseInt(in.nextLine());
            String m[] = in.nextLine().split(" ");
            String x[] = in.nextLine().split(" ");
            ArrayList<Integer> fl = new ArrayList<>();//用于存放铺展开来的砝码组
            //将每个砝码,无论是否重量一样,都装进fl中
            for(int i=0;i<n;i++){
                int mi = Integer.parseInt(m[i]);
                int xi = Integer.parseInt(x[i]);
                for(int j=0;j<xi;j++){
                    fl.add(mi);
                }               
            }

            /*逐个加入砝码,每加一个,都取出hs中已经存在的所有重量场景分别加该砝码重量后生成新的重量场景添加的hs中,
			例如第0个砝码有0,m0,下一个砝码加进去后就会是0,m0,0+m1,m0+m1,再下一个是0,m0,0+m1,m0+m1,0+m2,m0+m2,0+m1+m2,m0+m1+m2...,
			若重量有重复,Hashset会自动去重。*/
            HashSet<Integer> hs=new HashSet<>();
            hs.add(0);
            for(int k=0;k<fl.size();k++){
                Object[] ol = hs.stream().toArray();
                int hl = hs.size();
                for(int h=0;h<hl;h++){
                    hs.add((int)ol[h]+fl.get(k));
                }
            }
            System.out.println(hs.size());
        }
    }
}

全部评论

相关推荐

KPLACE:首先是板面看起来不够,有很多奖,比我厉害。项目要精减,大概详细描述两到三个,要把技术栈写清楚,分点,什么算法,什么外设,怎么优化,不要写一大堆,分点,你写上去的目的,一是让别人知道你做了这个知识点,然后在面试官技术面的时侯,他知道你会这个,那么就会跟你深挖这个,然后就是个人评价改为专业技能
点赞 评论 收藏
分享
02-11 12:20
门头沟学院 Java
面试中的青提很胆小:我不信有比我们学校更逆天的,计算机专业就业第一位是我们学校二餐厅的打印店
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务