美文网首页
[6kyu]The maximum sum value of r

[6kyu]The maximum sum value of r

作者: 君肄塵 | 来源:发表于2017-07-27 16:29 被阅读29次

    该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~

    • 场景

    给定一个包含一些整数(正,负或0)的数组arr,范围列表如[[start1,end1],[start2,end2],...],开始和结束是arr的索引,此时开始总是小于结束。您的任务是计算每个范围的总和值,并返回最大和值。

    • 任务
    • 写一个函数需要两个参数 - 直径,价格 - 并将每平方的价格返回,保留两位小数。 (作为一个数字,而不是字符串)
    • 例如:
      Given arr = [1,-2,3,4,-5,-4,3,2,1],
      range = [[1,3],[0,4],[6,8]]
      should return 6
      calculation process:
    
        range[1,3] = arr[1]+arr[2]+arr[3] = 5
        range[0,4] = arr[0]+arr[1]+arr[2]+arr[3]+arr[4] = 1
        range[6,8] = arr[6]+arr[7]+arr[8] = 6
        所以最大和值是 6
    
      maxSum([1,-2,3,4,-5,-4,3,2,1],[[1,3],[0,4],[6,8]]) // 6
    
        maxSum([1,-2,3,4,-5,-4,3,2,1],[[1,3]]) //  5
        maxSum([1,-2,3,4,-5,-4,3,2,1],[[1,4],[2,5]]) //  0
    
    • 注意:

    1.arr至少有5个元素。
    2.range至少有1个元素。
    3.所有输入均有效。


    • 解答
    • 其一
    const maxSum = (arr,range) => range.map(el=>arr.slice(el[0],el[1]+1).reduce((r,v)=>r+v,0)).sort((a,b)=>b-a)[0];
    
    • 其二
     const maxSum = (arr,range) =>  Math.max(...range.map(i => arr.slice(i[0], i[1] + 1).reduce((a, b) => a + b)))
    
    • 其三
    const maxSum = (arr,range) => {
          const getSum = ([start, end]) => arr.slice(start, end + 1).reduce((a, b) => a + b);
          return Math.max(...range.map(v => getSum(v)));
    }
    

    相关文章

      网友评论

          本文标题:[6kyu]The maximum sum value of r

          本文链接:https://www.haomeiwen.com/subject/drizkxtx.html