javascript - js 无序数组 任意个数 相加之和为定量m?
PHPz
PHPz 2017-04-10 16:38:33
[JavaScript讨论组]

js
数组:a[n]
定量m
a[0],a[1]......a[n]已知,m已知;
怎样计算出哪几个数相加的和为定量m?最终输出这几个数的index

PHPz
PHPz

学习是最好的投资!

全部回复(5)
巴扎黑

搜索背包问题

PHPz

我能想到就是循环遍历,一遍一遍来吧。。

阿神

关键词: 01背包问题

高洛峰

背包问题,但要数组2边同时开始遍历,时间复杂度就为n,效率高一倍。

阿神

不知道效率怎么样
实现了再说吧~~

function getcombinationAndMatched(initval,array,targetValue,someGroup){
    var result=[];
    var matched=[];
    var startIndex;
    if(someGroup.index.length===0){
        startIndex=-1;
    }else{
        startIndex=someGroup.index[someGroup.index.length-1];
    }
    for(var i=startIndex+1;i<array.length;i++){
        if(initval+array[i]<=targetValue) {
            if(initval+array[i]===targetValue){
                matched.push(someGroup.index.slice(0).concat([i]));
                someGroup.value=targetValue;
                someGroup.index.push(i);
            }else{
                result.push({
                    value:initval+array[i],
                    index:someGroup.index.slice(0).concat([i])
                });
            }
        }else{
            break;
        }

    }
    return {
        matched:matched,
        result:result
    }
}

function getMatchedGroup(groupArray,orgArray,targetValue){
    var matched=[];
    for(var q=0;q<groupArray.length;q++){
        var groupResult=getcombinationAndMatched(groupArray[q].value,orgArray,targetValue,groupArray[q]);
        matched=matched.concat(groupResult.matched);
        if(groupResult.result.length!=0){
            var _matched_=getMatchedGroup(groupResult.result,orgArray,targetValue);
            matched=matched.concat(_matched_);
        }
    }

    return matched;

}


var orgArray=[1,2,3,4,5,6,7,8,9,20,30];
var targetValue=41;
orgArray.sort(function(a, b) {
    return a - b;
});
var subArray=[];
var findIndex=orgArray.findIndex(function(item){
    return item>targetValue;
});

if(findIndex===-1){
    subArray=orgArray;
}else{
    subArray=orgArray.slice(0,findIndex);
}

var result=getMatchedGroup([{
    value:0,
    index:[]
}],subArray,targetValue);
//console.log(result);

result.forEach(function(item){
   console.log(item.map(function(valueIndex){
       return orgArray[valueIndex];
   }).join(','));
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号