[6kyu]The maximum sum value of ranges -- Simple version

该算法题来自于 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 ranges -- Simple version)