实现方式1:
使用for循环+ array.reduce()函数,方式可以时间复杂度达到0(n),通过累加值 是否==k,来判断是否存在,如果 for循环+for循环,时间复杂度为0(n^2)了。
//使用array.reduce函数,累加,判断是否==k
function continueSum(arr,k){
for(var i=0;i<arr.length;i++){
var res = arr.slice(i).reduce(function(value,item){
//console.log(value,item,value+item);
if ( value == k) return true;
return value+item;
});
if (res==true) return true;
}
return false;
}
var arr2 = [1,3,6,7,8];
var yes = continueSum(arr2 ,13);
实现方式2:
使用for循环+递归,来完成累加,但是时间复杂度可能不太满足o(n)。
//循环数组,然后使用递归,进行值的累加。如果和K相同,则返回TRUE;
function sumValue(arr,k){
for(var i=0;i<arr.length;i++){
// v += arr[i];
var v = sub(arr,i,k);
if(v){
console.log('v:'+v);
return true;
}
}
return false;
}
//递归,对值进行相加;如果=k,则表示有连续片段,
function sub( arr, i,k,val){
if(i==arr.length) return false;
if(val == k || i==arr.length) return true;
if(val===undefined) val = 0;
val += arr[i++];
return sub(arr, i ,k,val);
}
//测试
var arr = [1,3,6,7,8];
var result =sumValue(arr,21);