查找总和等于数字的所有子数组? [英] Find all subarray with sum equal to number?

查看:50
本文介绍了查找总和等于数字的所有子数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

能否请您告诉我如何找到总和等于数字的所有子数组例子

Could you please tell me how to find all subarray with sum equal to number Example

arr[] = [2, 4, 45, 6, 0, 19]
   x  =  51
Output: [2,4,45]

arr[] = [1, 11, 100, 1, 0, 200, 3, 2, 1, 280]
    x = 280
Output: [280]

我尝试过那样,但是没有得到正确的输出

I tried like that but not getting correct output

function getSubArray(arr, num) {
  var sum = 0,
    blank = [];
  var bigArr = []
  for (var i = 0; i < arr.length; i++) {
    sum = arr[i];
    if (blank.length === 0) {
      blank.push(arr[i]);
    }
    for (var j = 1; i < arr.length; j++) {
      sum += arr[j];
      if (sum < num) {
        blank.push(arr[j])
      } else if (sum > num) {
        sum = 0;
        blank = [];
        break;
      } else {
        blank.push(arr[j])
        bigArr.push(blank);
        sum = 0;
        blank = [];
      }
    }
  }

  return bigArr
}

console.log(getSubArray([1, 3, 6, 11, 1, 5, 4], 4));

此预期输出为

console.log(getSubArray([1, 3, 6, 11, 1, 5,4],4));

output: [1,3]
     [4]

预期输出[[1,3],[4]]是我的预期输出

推荐答案

您可以迭代数组并采用下一个元素,或者如果在省略该元素之前未采用任何元素,则为该元素.

You could iterate the array and take either the next element or if no element is taken before omit this element.

function getSubset(array, sum) {
    function iter(temp, delta, index) {
        if (!delta) result.push(temp);
        if (index >= array.length) return;
        iter(temp.concat(array[index]), delta - array[index], index + 1);
        if (!temp.length) iter(temp, delta, index + 1);
    }

    var result = [];
    iter([], sum, 0);
    return result;
}

console.log(getSubset([2, 4, 45, 6, 0, 19], 51));                   // [2, 4, 45], [45, 6], [45, 6, 0]
console.log(getSubset([1, 11, 100, 1, 0, 200, 3, 2, 1, 280], 280)); // [280]
console.log(getSubset([1, 3, 6, 11, 1, 5, 4], 4));                  // [1, 3], [4]

这篇关于查找总和等于数字的所有子数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆