题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

参考其他网友的解答 解答精髓在最后一个function的输入设置中 完整代码如下
const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
//前面这些都中规中矩,正常将输入的数组分成三个数组,一个是3的倍数(但不是5的倍数)arr1, 一个是5的倍数(但可以是3的倍数)arr2,剩余的为一组arr3;
let lines = [];
rl.on("line", function (line) {
    lines.push(line);
    if (lines.length > 1) {
        let arr = lines[1].split(' ').map(Number);
        let arr1 = arr.filter((v)=>{
            return v%3==0 && v%5!=0;
        });
        let arr2 = arr.filter((v)=>{
            return v%5==0;
        })
        let arr3 = arr.filter((v)=>{
        return v%5!=0 &&v%3!=0;
        })
        let sum1 = arr1.reduce((pre,cur)=>{
        return pre+cur;
        },0);
        let sum2 = arr2.reduce((pre,cur)=>{
        return pre+cur;
        },0);
        console.log(isExists(sum1, sum2, arr3, 0));
    }
});
//最最精彩的是function isExists()内"||"的运用,很巧妙
function isExists(sum1,sum2,nums,index){
    if(index == nums.length && sum1 == sum2) return true;
    if(index < nums.length) return isExists(sum1+parseInt(nums[index]), sum2, nums, index+1) || isExists(sum1, sum2+parseInt(nums[index]), nums, index+1);
    return false;
}


全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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