笔试编程题之数组求和
来源:互联网 发布:centos升级kde 编辑:程序博客网 时间:2024/06/11 13:28
题目描述
计算给定数组 arr 中所有元素的总和
输入描述:
数组中的元素均为 Number 类型
示例
输入
[ 1, 2, 3, 4 ]
输出
10
注意
(首先判断数组长度,这是很容易被大家遗忘的!!!)
长度如果为0,直接返回-1;
如果为1,直接返回arr[0]
如果大于1,就是接下来我们要讨论的内容
思路一
使用for循环遍历
function sum(arr) { var sum=0; if(arr.length==0){ return 0; }else if (arr.length==1) { return arr[0]; }else { for(var i=0;i<arr.length;i++){ sum=sum+arr[i]; } } return sum;}
思路二
递归方法
很容易想到使用for循环来解决这个问题,那么你有没有考虑过用递归的方式呢?(不考虑算法的时间复杂度条件下)
function sum(arr){ return arr[0]+sum(arr.slice(1));}
这是使用到一个方法叫slice(),它的参数形式是slice(start,end),返回一个由下标start开始到end之间的新数组(不包括end),如果不指定end,则返回start到数组末尾(包括末尾)
思路三
使用eval
也许你对eval不熟悉或者很陌生,只是依稀记得很多书告诉我们最好别用eval,因为它会存在安全问题
但这并不妨碍我们使用它来解决这个问题
arr.join(‘+’)会返回一个字符串,链接符为“+”
eval()会解析一个字符串参数,并执行里面的js代码
function sum(arr){ return eval(arr.join('+'));//返回一个字符串}
思路四
使用forEach遍历数组
function sum1(arr){ var result=0; arr.forEach( function(element) { result+=element; }); return result;}
forEach()需要传入一个回调函数
思路五
最后介绍一个比较冷门的方法,那就是reduce()
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
function sum(arr){ arr.reduce(function(total,current){ return total+current; })}
total代表前面的数加起来的总数,current代表当前值
reduce会在每个数组项中调用回调函数
一个简简单单的数组求和居然有这么多种解决方式,你get到了吗?
阅读全文
0 0
- 笔试编程题之数组求和
- 编程基本功之数组求和
- 华为笔试编程题(逆序求和)
- JS编程训练 | 题2:数组求和
- 笔试编程题之查找数组的位置
- 分治算法题之数组元素求和
- 小编程题之大数据求和
- 笔试面试之编程题
- PHP笔试之编程题
- 猿辅导2017校园招聘笔试题 求和为0的最长连续子数组
- cuda编程入门示例3---数组求和
- C++模板元编程之使用模板,对数组进行“编译期间求和”
- 360笔试编程题之第一题
- 360笔试编程题之第二题
- 2016华为笔试题——整数之循环节点求和
- 编程笔试题 之 字符打印
- 美团笔试之编程题
- 笔试题之算法与编程(JAVA)
- ImportError: No module named 'tensorflow.tensorboard.tensorboard'
- tagVariant
- 提高cookie安全性的几种方式
- (二)数据控制分离
- 生成模型与判别模型
- 笔试编程题之数组求和
- 3175: [Tjoi2013]攻击装置
- 数据结构之图篇(1):概述
- bzoj 3175: [Tjoi2013]攻击装置
- 对象类型的转换
- Java--集合
- P1136 迎接仪式
- 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 2)
- 源码托管平台