题解 | #称砝码#普通循环遍历和回溯法,回溯法时间复杂度大

称砝码

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

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(n = Number(await readline())){
        let weights = (await readline()).split(' ').map(Number);
        let nums = (await readline()).split(' ').map(Number);
        // 把所有砝码放在一个数组,遍历这个数组,在改遍历中再遍历res的每一项,然后加weights[i]
        weights = weights.reduce((pre, cur, i) => pre.concat(new Array(nums[i]).fill(cur)), []);
        let res = new Set([0]);
        for (let i = 0; i < weights.length; i++) {
            [...res].forEach(v => {
                res.add(v + weights[i]);
            });
        }
        // 这里用回溯法,时间复杂度大,数据多的时候时间过不了,看看哪个大神有优化方案
        // let used = new Set();
        // backtrack(0, 0);
        // function backtrack(index, sum) {
        //     res.add(sum);
        //     if (index >= weights.length) return;
        //     for (let i = index; i < weights.length; i++) {
        //         if (!used.has(i)) {
        //             used.add(i);
        //             backtrack(i, sum + weights[i])
        //             used.delete(i);
        //         }
        //     }
        // }
        console.log(res.size);
    }
}()

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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