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
是否正确,但我确实看到约束至少需要,bei>=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啊,好的,我现在明白了。