给定一个整数数组 nums 和一个目标值 k,请实现一个方法判断 nums 中是否存在某个片段(即若干个相连元素)之和等于 k。要求时间复杂度为 O(n)

实现方式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);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值