FCC 中级算法题 对所有的数字求和

题干:

我们会传递给你一个包含两个数字的数组。返回这两个数字和它们之间所有数字的和。

最小的数字并非总在最前面。

1 function sumAll(arr) {
2   return 1;
3 }
4
5 sumAll([1, 4]);

会用到的函数

Math.max()

Math.min()

Array.reduce()

思路:

(1)通过Math.max(),Math.min()抽出数组中的最大值max和最小值min;

(2)创建新数组获取最小值和最大值之间的数值;

(3)利用Array.reduce()对新数组进行累加。

知识点:

(1)Math.max(),Math.min()不能接受数组作参数,Math.max(array)这种操作是不存在的;

而apply是所有函数都有的方法,fun.apply(thisArg, [argsArray])thisArg相当于在 fun 函数运行时指定的 this ,

argsArray一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun 函数;
1  function getMaxOfArray(numArray) {
2         return Math.max.apply(null, numArray);
3     }

这个函数用for循环也可以实现,但是太过繁琐。

(2)reduce()方法可以对数组的每一个元素进行操作,下面代码中value是单个元素的值,sum则是这些元素的累加值;

1 var total = arr.reduce(function (sum, value) {
2        return sum + value;
3      }, 0);

我的代码:

 1 function sumAll(arr) {
 2     function getMaxOfArray(numArray) {
 3         return Math.max.apply(null, numArray);
 4     }
 5
 6     function getMinOfArray(numArray) {
 7         return Math.min.apply(null, numArray);
 8     }
 9     var max = getMaxOfArray(arr);
10     var min = getMinOfArray(arr);
11     var array = [];
12
13     for (var i = min; i <= max; i++) {
14         arr[i - min] = i;
15     }
16     var total = arr.reduce(function (sum, value) {
17         return sum + value;
18     }, 0);
19
20     return total;
21 }
22 sumAll([1, 4]);
时间: 2024-08-10 19:09:18

FCC 中级算法题 对所有的数字求和的相关文章

FCC 中级算法题 找到缺失的字母

Missing letters 从传递进来的字母序列中找到缺失的字母并返回它. 如果所有字母都在序列中,返回 undefined. String.charCodeAt() String.fromCharCode() 思路: (1)直接将字符串转化为数字按顺序放入数组arr中; (2)如果没有缺失的字母,数组的最大值减最小值加1应该等于数组的长度,利用这一特点,创建这样一个理想的没有缺失的数组newArr; (3)从newArr中剔除与数组arr相同的元素,这样就找到了丢失字母的数字,由于可能不止

fcc中级算法题

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

FCC 中级算法题 比较两个数组

Diff Two Arrays 比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素.言之,返回两个数组的差异. ComparisonOperators Array.slice() Array.filter() Array.indexOf() Array.concat() 思路: 先找出arr1中与arr2不同的部分组成新数组1,再找出arr2中与arr1不同的部分组成新数组2,在将这两个数组合并,得出两个数组不同的部分. 知识点: (1)var newArr=arr

FCC 中级算法题 最小公倍数

Smallest Common Multiple 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 -- 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数. Smallest Common Multiple 思路: (1)找出所给值的最大值和最小值: (2)给最大值分别乘以1到100000装入数组maxArr中: (3)将所给的两个数值及其中间的数按顺序装入数组newArr中: (4)将最大值的倍数分

FCC 中级算法题 罗马数字转换器

Roman Numeral Converter 将给定的数字转换成罗马数字. 所有返回的 罗马数字 都应该是大写形式. Roman Numerals Array.splice() Array.indexOf() Array.join() 思路: (1)把所给的数字拆分成数组: (2)将其倒序之后利用索引与元素的关系将其转化为罗马字符(可以不倒序,不过就有些麻烦了): (3) 再把它倒回来,然后合并,就是原来数字的罗马数字表现. 知识点: (1)array=string.split(''); sp

FCC 中级算法题 Binary Agents

Binary Agents 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. String.charCodeAt() String.fromCharCode() 思路: (1)把字符串转化为数组: (2)把数组中的二进制转化为十进制: (3)把数组中的十进制数字转化为字母: (4)把数组转化为字符串: 知识点 (1)String.split()方法将一个String对象分割成字符串数组,通过将字符串分成子串; (2)parseInt(string,num) num代表num

FCC 中级算法题 数组扁平化

Steamroller 对嵌套的数组进行扁平化处理.你必须考虑到不同层级的嵌套. Array.isArray() 思路: (1)遍历arr,如果arr[i]是数组,就重新调用本函数继续循环,然后和新数组连接; (2)如果不是数组,就直接添加进新数组: 知识点: (1)Array.concat()方法用于合并两个或多个数组.此方法不会更改现有数组,而是返回一个新数组; (2)Array.push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度; (3)Array.isArray()用于

FCC 中级算法题 所有素数之和

Sum All Primes 求小于等于给定数值的质数之和. 只有 1 和它本身两个约数的数叫质数.例如,2 是质数,因为它只能被 1 和 2 整除.1 不是质数,因为它只能被自身整除. 给定的数不一定是质数. For Loops Array.push() 思路: 找出从0到num之间所有的质数,然后遍历累加: 知识点: 质数除2到自己本身(不包含)都不会整除: 失误: 我把拿来确定a是否可以整除的b放到了全局中,这导致a每次循环但b的值不会变化,后来我将b声明到了a的循环中: 代码: 1 fu

FCC 中级算法题 碱基配对

DNA Pairing DNA 链缺少配对的碱基.依据每一个碱基,为其找到配对的碱基,然后将结果作为第二个数组返回. Base pairs(碱基对) 是一对 AT 和 CG,为给定的字母匹配缺失的碱基. 在每一个数组中将给定的字母作为第一个碱基返回. 例如,对于输入的 GCG,相应地返回 [["G", "C"], ["C","G"],["G", "C"]] 字母和与之配对的字母在一个数组