最长子串

求数组的最长子串



var fn = function(arr,sum,index,len) {
    // 无法取的情况
    if(index+len == arr.length){
        return {sum,index,len};
    }

    // 能取的情况
    var list = [];
    // 1.不取
    var notFetch = sum;
    // 2.取下一个
    var fetch = sum+arr[index+len];
    // 如果多fetch一个数字,不比notFetch大,则push notFecth
    if(fetch<notFetch){
        list.push({sum:notFetch,index,len});
    }
    // 2.1 使得sum为负

    // 2.2 使得sum不为负
    if(fetch>=0){
        list.push(fn(arr,fetch,index,len+1));
    }else{
        // 2.3 放弃已经fetch的
        list.push(fn(arr,0,index+1,0));
    }

    return max(list);

};

function max(arr){
    return arr.sort(function(a,b){
        return b.sum - a.sum;
    })[0];
}

console.log(fn([1, 5, -7, 2, 6, -1, 5],0,0,0));
console.log(fn([1, 5, -7, 2, 6, -11, 5],0,0,0));
console.log(fn([1, 5, -4, 2, 6, -1, 5],0,0,0));
console.log(fn([-3,-1],0,0,0));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值