Javascript 要为数组';s最大值和最小值。例如:[1,4]应该返回1+;2+;3+;4=10
编译器似乎没有进入for循环。要计算数组的和。SumAll([1,4])应该返回10(1+2+3+4)作为输出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
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:pFor
循环没有被执行,因为您是在第一次迭代中从它返回的。@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]
asreduce(+)0[1,2,3,4,5]
。但这有点疯狂。明白了!感谢@ThiloTime复杂性并不是真正的O(1)
,因为您仍然必须确定数组中的最大值和最小值(不知何故忽略了该值),但公式是绝对可行的!在这个问题上有一个误解。我知道数组总是有两个格式为:[minNumber,maxNumber]的数字。因此,您不必搜索数组中的数字。更重要的是,即使我们想包括查找数组的极值,这仍然只是O(n)
在数组的长度上,而不是在数字本身的大小上(就像一个循环)。因此,如果你给出数组长度的上限(例如2…),它仍然是有效的O(1)
。a和b的值在reduce()中如何变化?@rajesha
将为第一次迭代保留初始值,为其他迭代保留上一次迭代的返回值。b
将保留元素value@aayushi您可以参考以下内容了解更多解释。