如何解出数组中最大的子序列?花一分即可了解原理,just so so

最近面试的时候,总会碰到一道题,刚开始看到题目一脸懵,后来第二次又碰到,好吧,既然躲不过,那咱就坐下来好好理理,先弄明白原理,再去写代码.

需求:请用js求出[3, -6, 123, -945, -231, 112]中的最大子序列?

一 . 什么叫最大子序列?看的一脸懵逼

例如:[1,-1,2]这个数组,它的子序列,就是[1],[1,-1][1,-1,2],[-1,2],[2] ('为了看的清晰,小编在这里用[]包起来'); 看到这里想必大家都已经明白了子序列的概念,就是不同的组合,最大的子序列就是子序列之和最大的那个排列.

二 . 弄懂了题目,我们现在就着手开始分析原理:

  1. 要找出左右的排序组合
  2. 算出所有的排序组合之和,找到和最大的那项排序.

三 .上代码

var ary=[3, -6, 123, -945, -231, 112];
//第一步:求出所有的子序列组合;[[3],[3,-6]....]
var allary=[];//所有的子序列-------------------------
for(var i=0;i<ary.length;i++){
    let cur=ary[i];
    allary.push([ary[i]]);
    
    for(var j=i+1;j<ary.length;j++){
        let item=ary.slice(i,j+1);
        allary.push(item);
    }

}
//第二步骤:累加求和,求出最大的和
let maxsum=null;
let totalAry=[];//求出所有子序列的和
let index=null;//代表maxsum 在totalAry中对应的索引,也就是子序列中对应和最大的那项子序列
for (var i=0;i<allary.length;i++){
    let total=allary[i].reduce((pre,cur)=>{
         return pre+cur;
    });
    totalAry.push(total);
    maxsum=maxsum>total?maxsum:total;
    //第三步骤:找出 maxsum 在totalAry 中的索引
     index= totalAry.findIndex((item)=>{
            return item==maxsum
    })
}
console.log(allary[index])

复制代码

大致的原理就是这样,在这里小编就不封装了,做程序员的你just so so,这个代码通俗易懂,但是缺少优化,欢迎大家一起来做更深层次版本的答案,让我们一起提升,让咱们的程序之路just so so!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值