FreeCodeCamp之sum all numbers in a range

我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。最小的数字并非总在最前面。

sumAll([1, 4]) 应该返回一个数字。

sumAll([1, 4]) 应该返回 10。

sumAll([4, 1]) 应该返回 10。

sumAll([5, 10]) 应该返回 45。

sumAll([10, 5]) 应该返回 45。

题目给出的提示是Math.max()   Math.min()   和array.reduce()。前两个用法一模一样,是静态方法,Math.max(number1,number2,number3....)返回numbers中最大/最小的数不能直接作用数组,Math.max([number1,number2,number3])是会出错数组不能转换成数字,若是空数组可以转换成0就不会出错,要想用Math.max只能使用函数,用apply:

function getMaxOfArr(function(number){

return Math.max.apply(null,arr);

}

var max=getMaxOfArr(arr);

reduce作用于数组。arr.reduce(callbackfunction(),index);从index处一次调用arr中的每个值,执行callbackfunction;

使用Math.max和reduce实现过程:

function sumAll(arr) {

function getMaxOfArr(numArr){
               return Math.max.apply(null,numArr);
        }
       function getMinOfArr(numArr){
              return Math.min.apply(null,numArr);
       }
      var max= getMaxOfArr(arr);
      var min=getMinOfArr(arr);
      var newArr=[];
      for(i=min;i<=max;i++){
           newArr.push(i);
      }
       var total=newArr.reduce(function(sum,val){
             return sum+val;
      },0);
     return total;

}

使用sort后可以大大减少代码量:

function sumAll(arr) {

//数组排序

arr.sort(function(a,b){

return a-b;});

      var sum=0;
        for(i=arr[0];i<=arr[1];i++){
             sum+=i;
       }
     return sum;
}

sumAll([5, 4]);

时间: 2024-10-02 01:38:06

FreeCodeCamp之sum all numbers in a range的相关文章

Sum All Numbers in a Range

我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 如果你被难住了,记得使用 Read-Search-Ask.尝试与他人结伴编程.编写你自己的代码. 这是一些对你有帮助的资源: Math.max() Math.min() Array.reduce() 下面的方法使用 apply 方法寻找一个数值数组中的最大元素. function getMaxOfArray(numArray) { return Math.max.apply(null, nu

FCC_Intermediate Algorithm Scripting_Sum All Numbers in a Range

1.任务及要求 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 如果你被难住了,记得使用 Read-Search-Ask.尝试与他人结伴编程.编写你自己的代码. 这是一些对你有帮助的资源: Math.max() Math.min() Array.reduce() 测试数据:  sumAll([1, 4]) 应该返回一个数字. sumAll([1, 4]) 应该返回 10. sumAll

hdu_1003_Max Sum hdu_1058_Humble Numbers hdu_1059_Dividing

hdu_1003_Max Sum http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意是给出一组数,求出这组数的一个最大的连续子序列的和,并且要求出序列的左右区间. 这道题不会做,膜拜后的思想是,一个连续序列s要加上一个数a,除非该连续序列s的sum已经>0,否则a可以独立成一个序列s'.于是,用maxsum记录最大的序列和,l和r记录左右区间. #include <cstring> #include <iostream> u

The sum of numbers form 0 to n.(20.9.2017)

#include <stdio.h> int main() { int a,b,sum; printf("输入一个数字: "); scanf("%d",&a); //输入数字a sum = 0; for(b=1;b<=a;b++){ //设置b=1 使用for loop,用b相加,一直加到输入的数字a的数值 sum = sum + b; } printf("%d",sum); }

FreeCodeCamp:Return Largest Numbers in Arrays

要求: 右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组. 提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组的每个元素. 结果: largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) 应该返回一个数组. largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 3

FreeCodeCamp( FCC)前端工程师 中级算法练习 分析与解答(全)(精)

[TOC] 说在前面 这是要一篇非常简单的新手能看懂的文章,希望你喜欢.由于在 freecodecamp 中貌似!?无法使用 ES6 的某些语法,未测试具体.所以基本上用古老?!的ES5,4写成,谢谢.在写本博文前没有参考过别人的做法,纯手打,我的方法肯定不是最好,只是以我自己喜欢的方式在写而已. 纯原创,转载请联系作者https//:[email protected].[email protected]. freecodecamp China 不明白API请参考MDN给出的解释 个别题目没有判

fcc中级算法题

1 Sum All Numbers in a Range 我们会传递给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 如果你被难住了,记得使用 Read-Search-Ask.尝试与他人结伴编程.编写你自己的代码. 这是一些对你有帮助的资源: Math.max() Math.min() Array.reduce()

leetCode191/201/202/136 -Number of 1 Bits/Bitwise AND of Numbers Range/Happy Number/Single Number

一:Number of 1 Bits 题目: Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight). For example, the 32-bit integer '11' has binary representation 00000000000000000000000000001011, so t

【LeetCode】201. Bitwise AND of Numbers Range

Bitwise AND of Numbers Range  Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. Credits:Special thanks to @amrsaqr for a