1、普通逻辑实现
var arr = [1,4,19,27,4,6,18,36,57,1,3]
var sliceArray = function (arr, start, end) {
return arr.slice(start, end)
}
var sumArray = function (arr) {
if (arr.length <= 0) {
return 0
}
return arr.reduce(function(prev, curr){
return prev + curr;
});
}
var minArray = function( arr ){
return Math.min.apply( Math, arr );
};
var indexOfArray = function (arr, value) {
return arr.findIndex(function(item){
return item == value
});
}
var difference = function(leftSum, rightSum) {
return Math.abs(leftSum - rightSum)
}
var count = 0;
var differenceArr = []
var differenceMap = {}
for (var i = 0; i<= arr.length; i++) {
var leftArr = sliceArray(arr, 0, i)
var rightArr = sliceArray(arr, i, arr.length)
var leftSum = sumArray(leftArr)
var rightSum = sumArray(rightArr)
var _difference = difference(leftSum, rightSum)
console.log(i + "-left:" +leftArr.toString() + "==>" + leftSum)
console.log(i + "-right:" +rightArr.toString() + "==>" + rightSum)
console.log(i + "-left-right:" + _difference)
differenceMap[_difference] = i;
differenceArr.push(_difference)
}
var min = minArray(differenceArr)
console.log("differenceArr:" + differenceArr.toString())
console.log("differenceArr-min:" + min)
console.log("min-index:" + differenceMap[min])
-------------------------------------------------------------------------
2、利用递归函数实现
var arr = [1,4,19,27,4,6,18,36,57,1,3]
var sliceArray = function (arr, start, end) {
return arr.slice(start, end)
}
var sumArray = function (arr) {
if (arr.length <= 0) {
return 0
}
return arr.reduce(function(prev, curr){
return prev + curr;
});
}
var indexOfArray = function (arr, value) {
return arr.findIndex(function(item){
return item == value
});
}
var difference = function(leftSum, rightSum) {
return Math.abs(leftSum - rightSum)
}
var _i = 0, differenceValue, targetIndex;
function calculate (arr) {
if (_i >= arr.length) {
return targetIndex
}
var leftArr = sliceArray(arr, 0, _i)
var rightArr = sliceArray(arr, _i, arr.length)
var leftSum = sumArray(leftArr)
var rightSum = sumArray(rightArr)
var _differenceValue = difference(leftSum, rightSum)
console.log(_i + "-left:" +leftArr.toString() + "==>" + leftSum)
console.log(_i + "-right:" +rightArr.toString() + "==>" + rightSum)
console.log(_i + "-left-right:" + _differenceValue)
if (_i == 0) {
differenceValue = _differenceValue, targetIndex = _i;
} else if(differenceValue > _differenceValue){
differenceValue = _differenceValue, targetIndex = _i;
}
console.log("differenceValue = " + differenceValue + ",targetIndex = " + targetIndex)
_i++
return calculate(arr)
}
var min = calculate(arr)