Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免使用嵌套循环查找数组的最大大小的子字符串?_Javascript - Fatal编程技术网

Javascript 避免使用嵌套循环查找数组的最大大小的子字符串?

Javascript 避免使用嵌套循环查找数组的最大大小的子字符串?,javascript,Javascript,应返回根据输入长度添加的最大数量 例如,如果长度为2,则应返回arr[0]+arr[1],arr[1]+arr[2],arr[2]+arr[3]之间的最大值 输入是数组和长度 我在一次真正的工作面试中解决了这个问题,但我认为会有一种方法不使用嵌套循环 const add=(arr,len)=>{ 设rtnVal=0 for(设i=len-1;iarr.slice(len>arr.len?arr.len:-len)。减少((总计,num)=>total+num) log(添加([1,2,3,4,

应返回根据输入长度添加的最大数量

例如,如果长度为
2
,则应返回
arr[0]+arr[1]
arr[1]+arr[2]
arr[2]+arr[3]
之间的最大值

输入是数组和长度

我在一次真正的工作面试中解决了这个问题,但我认为会有一种方法不使用嵌套循环

const add=(arr,len)=>{
设rtnVal=0
for(设i=len-1;irtnVal){
rtnVal=温度和
}
}
返回rtnVal
}

log(添加([1,2,3,4,5,6,7,8,9,4))
假设其排序与您的示例类似。您可以使用负切片从末端进行选择,然后减少数组

const add=(arr,len)=>arr.slice(len>arr.len?arr.len:-len)。减少((总计,num)=>total+num)

log(添加([1,2,3,4,5,6,7,8,9,4))
假设其排序与您的示例类似。您可以使用负切片从末端进行选择,然后减少数组

const add=(arr,len)=>arr.slice(len>arr.len?arr.len:-len)。减少((总计,num)=>total+num)

log(添加([1,2,3,4,5,6,7,8,9,4))
使用移动窗口。从开头开始加上
len
数字。然后继续在数组中添加下一个数字并减去尾随数字

const add = (arr, len) => {
  return arr.reduce((a,v,i,arr) => {
    a.running += v;
    if(i >= len) {
      a.running -= arr[i-len];
    }
    if(i+1 >= len && a.largest < a.running) {
      a.largest = a.running;
    }
    return a;
  }, {
    largest: Number.NEGATIVE_INFINITY,
    running: 0
  }).largest;
}

console.log(add([1,2,3,4,5,6,7,8,9],4)); // 30
console.log(add([-1,-1,-1,-1],2)); // -2
console.log(add([1],1)); // 1
const add=(arr,len)=>{
返回arr.reduce((a,v,i,arr)=>{
a、 运行+=v;
如果(i>=len){
a、 运行-=arr[i-len];
}
如果(i+1>=len&&a.max
使用移动窗口。从开头开始加上
len
数字。然后继续在数组中添加下一个数字并减去尾随数字

const add = (arr, len) => {
  return arr.reduce((a,v,i,arr) => {
    a.running += v;
    if(i >= len) {
      a.running -= arr[i-len];
    }
    if(i+1 >= len && a.largest < a.running) {
      a.largest = a.running;
    }
    return a;
  }, {
    largest: Number.NEGATIVE_INFINITY,
    running: 0
  }).largest;
}

console.log(add([1,2,3,4,5,6,7,8,9],4)); // 30
console.log(add([-1,-1,-1,-1],2)); // -2
console.log(add([1],1)); // 1
const add=(arr,len)=>{
返回arr.reduce((a,v,i,arr)=>{
a、 运行+=v;
如果(i>=len){
a、 运行-=arr[i-len];
}
如果(i+1>=len&&a.max
循环一次,但保持头部和尾部的“指针”。在每次向前移动时,将头值相加,并从运行总和中减去尾值。沿途追踪max。相同的基本问题,但一些细节不同:循环一次,但保持头部和尾部的“指针”。在每次向前移动时,将头值相加,并从运行总和中减去尾值。沿途追踪max。相同的基本问题,但一些细节不同:很抱歉,你的回答没有给出我期望的答案。我认为这只在对输入数组值进行排序时起作用。谢谢,很抱歉,你的回答没有带来我所期望的答案。我认为这只在对输入数组值进行排序时起作用。感谢条件
a.maximust
只能在
i>=len-1
时执行,否则结果将是(错误的)
-1
对于
len>1
arr
充满
-1
@user202729我不确定
i>=len-1
是否正确,但我确实看到约束至少需要,be
i>=len
以说明数组开头附近的负整数。我假设
arr.length>=len
为真。不,这仍然是错误的,因为它没有考虑最左边的数组。试试
a=[1],len=1
@user202729啊,好的,我现在明白了。只有当
I>=len-1
时才应该执行条件
a.maxist
,否则结果会(错误)
-1
对于
len>1
arr
-1
@user202729,我不确定
I>=len-1
是否正确,但我确实看到约束至少需要是
I>=len
才能考虑数组开头附近的负整数。我假设
arr.length>=len
为真。不,这仍然是错误的,因为它没有考虑最左边的数组。试试
a=[1],len=1
@user202729啊,好的,我现在明白了。