子集和 - 获取数组索引而不是值

时间:2015-03-03 08:40:55

标签: javascript arrays

我有以下功能:

function createSubsets(numbers, target) {
  // filter out all items larger than target
  numbers = numbers.filter(function (value) {
    return value <= target;
  });

  // sort from largest to smallest
  numbers.sort(function (a, b) {
    return b - a;
  });

  // array with all the subsets
  var result = [];

  while (numbers.length > 0) {
    var i;
    var sum = 0;
    var addedIndices = [];

    // go from the largest to the smallest number and
    // add as many of them as long as the sum isn't above target
    for (i = 0; i < numbers.length; i++) {
      if (sum + numbers[i] <= target) {
        sum += numbers[i];
        addedIndices.push(i);
      }
    }
    console.log(addedIndices);
    // remove the items we summed up from the numbers array, and store the items to result
    // since we're going to splice the numbers array several times we start with the largest index
    // and go to the smallest to not affect index position with splice.
    var subset = [];
    for (i = addedIndices.length - 1; i >= 0; i--) {
      subset.unshift(numbers[addedIndices[i]]);
      numbers.splice(addedIndices[i], 1);
    }
    result.push(subset);
  }
  return result;
}

这基本上得到一个数组,它返回总和为target的子集。是否可以更改此函数以返回总计达目标的子集索引(原始number数组)?

0 个答案:

没有答案