首页 > 解决方案 > 将一个数组拆分为相等和的相等连续子数组

问题描述

我想检查是否可以将数组拆分为具有相同总和的连续子数组。拆分数组也意味着删除它的边框元素。

例如,要将它分成 3 个部分,我们需要删除元素

myArray = [2, 4, 5, 3, 3, 3, 2, 1, 3]
                 ^        ^

通过删除这 2 个元素,有 3 个连续子数组具有相同的 sum[2, 4]和.[3, 3][2, 1, 3]

因此,如果可以将数组分成 3 部分(总和相等)并删除它们之间的边界 - 它应该返回 true,否则它应该返回 false。

一个会返回的例子false[1, 1, 1, 1, 1, 1]. 因为在删除 2 个元素后,它将有 4 个元素1不能归为 3 个相等的总和

我不知道如何解决这个问题,任何建议都是有帮助的。

标签: javascriptarraysalgorithm

解决方案


我会做这样的事情。

myArray = [2, 4, 5, 3, 3, 3, 2, 1, 3];
var x = []; //result if sub-arrays

var i = 0;

while(i< myArray.length-3){
 x.push([myArray[i],myArray[i+1]])
  i = i+3;
  
};


var a =[]; //remaining element
for(var k =i; k<myArray.length;k++){
   a.push(myArray[k]);

}
 x.push(a)

console.log(x);
var sum =x[0].reduce((a, b) => a + b, 0);
var returnTrue = true;
for(var k=1; k<x.length; k++){
  var sumAnother = x[k].reduce((a, b) => a + b, 0);
  if(sumAnother!== sum){
    returnTrue = false;
    break;
  }
}

console.log(returnTrue);


推荐阅读