首页 新闻 会员 周边 捐助

一个分组算法js,可以伪代码提供思路,一直在线

0
悬赏园豆:10 [已解决问题] 解决于 2018-12-19 13:34
/*比如有这样一个数组,数组只相加<=8分组,大于8就分到下一组,
结果如下应该是一个二维数组:*/
var arr = [2, 3, 4, 2, 2, 2, 3, 4];

arr=  [
                    [2,3],
                    [4,2,2],
                    [2,3],
                    [4]
                ]
困了的主页 困了 | 初学一级 | 园豆:176
提问于:2018-12-19 10:46
< >
分享
最佳答案
0

伪代码:

function fuck(arr)
{
      newArray = [[]];

      foreach(a in arr):
      { 
          if(sum(newArray.Last) + a <= 8)
          {
                newArray.Last.append(a);
          }
          else
          {
                nextArray = [a];
                newArray.append(nextArray)
          }
      }
      return newArray;
}
收获园豆:10
会长 | 专家六级 |园豆:12463 | 2018-12-19 11:00

我按照思路自己调试下,3q

困了 | 园豆:176 (初学一级) | 2018-12-19 11:11
 function fuck(arr) {
                var newArray = [[]];
                //sum函数
                function sum(arr) {
                    arr = arr || [];
                    var total = arr.reduce(function (total, item) {
                        return total + item;
                    }, 0);
                    return total;
                }
                arr.forEach(a => {
                    //变动
                    newArray.Last = newArray.Last || [];
                    if (sum(newArray.Last) + a <= 8) {
                        newArray.Last.push(a);
                    }
                    else {
                        var nextArray = [a];
                        newArray.push(nextArray)
                    }
                });
                return newArray;
            }

 var a = fuck(arr);
            console.info(a);

改下后没有达到预期效果

困了 | 园豆:176 (初学一级) | 2018-12-19 11:25

@困了: 大哥,我写的是伪代码,因为我 不熟悉js,给你修改下:

    function fuck(arr) {
                var newArray = [[]];
                //sum函数
                function sum(arr) {
                    arr = arr || [];
                    var total = arr.reduce(function (total, item) {
                        return total + item;
                    }, 0);
                    return total;
                }
                arr.forEach(a => {
                    //变动
                    newArray[newArray.length - 1] = newArray[newArray.length - 1] || [];
                    if (sum(newArray[newArray.length - 1]) + a <= 8) {
                        newArray[newArray.length - 1].push(a);
                    }
                    else {
                        var nextArray = [a];
                        newArray.push(nextArray)
                    }
                });
                return newArray;
            }

    var arr = [2, 3, 4, 2, 2, 2, 3, 4];
    var a = fuck(arr);

js的数组好像没有Last属性,改改就能用了

会长 | 园豆:12463 (专家六级) | 2018-12-19 12:26

@会长: 刚才last那个没想明白

困了 | 园豆:176 (初学一级) | 2018-12-19 13:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册