Javascript 要为数组';s最大值和最小值。例如:[1,4]应该返回1+;2+;3+;4=10

Javascript 要为数组';s最大值和最小值。例如:[1,4]应该返回1+;2+;3+;4=10,javascript,array-algorithms,Javascript,Array Algorithms,编译器似乎没有进入for循环。要计算数组的和。SumAll([1,4])应该返回10(1+2+3+4)作为输出 function sumAll(arr) { //return Math.max.apply(Math,arr); //return Math.min.apply(Math,arr); // return "0"; var sum=arr.reduce(function(a,b){ for(var i=Ma

编译器似乎没有进入for循环。要计算数组的和。SumAll([1,4])应该返回10(1+2+3+4)作为输出

function sumAll(arr) {
      //return Math.max.apply(Math,arr);
      //return Math.min.apply(Math,arr);

        //  return "0";
        var sum=arr.reduce(function(a,b){
          for(var i=Math.min.apply(Math,arr);i<=Math.max.apply(Math,arr);i++){
         return a+b;
        }
        },0);
      //return sum;
    }

    sumAll([1, 4]);
函数sumAll(arr){
//返回Math.max.apply(Math,arr);
//返回Math.min.apply(Math,arr);
//返回“0”;
var sum=arr.REDUCT(函数(a,b){

对于(var i=Math.min.apply(Math,arr);i您可以尝试以下方法:

注意:数组具有范围限制,因此应将这些值用于循环,并使用
i
计算总和

样本

用于循环

函数getSumOfRange(arr){ var min=Math.min.apply(null,arr) var max=Math.max.apply(null,arr); var总和=0;
对于(var i=min;i您可以直接使用数组中的值,而无需减少

函数sumAll(arr){
var i,总和=0;

对于(i=Math.min.apply(null,arr);i有两种方法可以做到这一点

  • 使用数学公式
    n1+(n1+1)+…+n2=n2(n2+1)/2-n1(n1-1)/2
    。时间复杂度:O(1)
  • 编程。时间复杂性:O(n)
  • 显然,对于大范围的数字,第一种方法要快得多

    函数sumAllMath(arr){
    if(!(Array.isArray(arr)
    &&arr.length==2
    &&arr的类型[0]=“编号”
    &&arr的类型[1]=“编号”
    &&arr[0]while(从开始,您不需要
    reduce
    ,因为您没有要缩减的数组。但是,您可以保留for循环,并通过在每次迭代中将
    i
    添加到
    sum
    来累积总和。问题在于您:

    • 使用和不必要的减少
    • was
      return
      ing立即退出for循环,因此没有累积总和
    代码应该是这样的:

    函数sumAll(arr){
    var总和=0;
    
    对于(var i=Math.min.apply(Math,arr);i似乎没有人想使用前N个自然数之和的公式:

    function sumAll(arr) { 
       let start = Math.min.apply(Math, arr); 
       let end = Math.max.apply(Math, arr);  
       return (end * (end+1) - start * (start-1) ) / 2;
    }
    

    没有返回任何内容。For循环没有被执行。@RajeshYou也可以使用公式,前n个自然数之和=n*(n+1)/2:p
    For
    循环没有被执行,因为您是在第一次迭代中从它返回的。@Aayushiw为什么需要
    reduce
    这里?我正试图使用reduce()来执行它。为什么在这里不适用@hindmostwhy'Math.min.apply(null,arr)'和Math.max.apply(null,arr)?要获取数组中的最小值和最大值,就是从数组中获取最小值和最大值。使用对象作为参数,数组作为参数进行调用。为什么是reduce()此处不适用?因为您只需要数组的两个值,而不需要其他值(如果需要)。如果必须使用reduce(),那么代码是什么@Hitscotty@aayushi:要减少,首先需要构建
    min
    max
    之间所有数字的数组。然后可以实现
    sum[1,2,3,4,5]
    as
    reduce(+)0[1,2,3,4,5]
    。但这有点疯狂。明白了!感谢@ThiloTime复杂性并不是真正的
    O(1)
    ,因为您仍然必须确定数组中的最大值和最小值(不知何故忽略了该值),但公式是绝对可行的!在这个问题上有一个误解。我知道数组总是有两个格式为:[minNumber,maxNumber]的数字。因此,您不必搜索数组中的数字。更重要的是,即使我们想包括查找数组的极值,这仍然只是
    O(n)
    在数组的长度上,而不是在数字本身的大小上(就像一个循环)。因此,如果你给出数组长度的上限(例如2…),它仍然是有效的
    O(1)
    。a和b的值在reduce()中如何变化?@rajesh
    a
    将为第一次迭代保留初始值,为其他迭代保留上一次迭代的返回值。
    b
    将保留元素value@aayushi您可以参考以下内容了解更多解释。