为什么这两个循环 return 不同的结果?
Why these two loops return different results?
问题陈述
Given an array arr, find element pairs whose sum equal the second
argument arg and return the sum of their indices.
免责声明,我不是在寻求这个问题陈述的解决方案,而是关于我尝试创建的以下两个循环之间的混淆,它们的功能几乎完全相似但安慰不同的输出。
- 第一个循环
function pairwise(arr, arg) {
const indexOfPair = []
for ( let i = 0; i < arr.length -1; i++){
for (let j = i + 1; j < arr.length -1; j++ ){
let sum = arr[i] + arr[j]
if ( sum === arg){
indexOfPair.push(arr.indexOf(arr[i]), arr.indexOf(arr[j]))
}
else {
continue
}
}
}
console.log(indexOfPair)
console.log(indexOfPair.reduce((a, b) => a + b, 0))
}
pairwise([1,4,2,3,0,5], 7);
控制台输出:[1,3] & 4
- 第二个循环
function pairwise(arr, arg) {
const indexOfPair = []
for ( let i = arr.length - 1; i >= 0 ; i--){
for (let j = i -1; j >= 0; j--){
let sum = arr[i] + arr[j]
if ( sum === arg){
indexOfPair.push(arr.indexOf(arr[i]), arr.indexOf(arr[j]))
}
}
}
console.log(indexOfPair)
console.log(indexOfPair.reduce((a, b) => a + b, 0))
}
pairwise([1,4,2,3,0,5], 7);
控制台输出:[5,2,3,1] & 11 -> 这是预期的输出,我不明白为什么这两个循环返回不同的结果。
您没有到达 arr 中的最后一个条目。
for ( let i = 0; i < arr.length - 1; i++){
for (let j = i + 1; j < arr.length - 1; j++ )
应该是
for ( let i = 0; i <= arr.length - 1; i++){
for (let j = i + 1; j <= arr.length - 1; j++ )
问题陈述
Given an array arr, find element pairs whose sum equal the second argument arg and return the sum of their indices.
免责声明,我不是在寻求这个问题陈述的解决方案,而是关于我尝试创建的以下两个循环之间的混淆,它们的功能几乎完全相似但安慰不同的输出。
- 第一个循环
function pairwise(arr, arg) {
const indexOfPair = []
for ( let i = 0; i < arr.length -1; i++){
for (let j = i + 1; j < arr.length -1; j++ ){
let sum = arr[i] + arr[j]
if ( sum === arg){
indexOfPair.push(arr.indexOf(arr[i]), arr.indexOf(arr[j]))
}
else {
continue
}
}
}
console.log(indexOfPair)
console.log(indexOfPair.reduce((a, b) => a + b, 0))
}
pairwise([1,4,2,3,0,5], 7);
控制台输出:[1,3] & 4
- 第二个循环
function pairwise(arr, arg) {
const indexOfPair = []
for ( let i = arr.length - 1; i >= 0 ; i--){
for (let j = i -1; j >= 0; j--){
let sum = arr[i] + arr[j]
if ( sum === arg){
indexOfPair.push(arr.indexOf(arr[i]), arr.indexOf(arr[j]))
}
}
}
console.log(indexOfPair)
console.log(indexOfPair.reduce((a, b) => a + b, 0))
}
pairwise([1,4,2,3,0,5], 7);
控制台输出:[5,2,3,1] & 11 -> 这是预期的输出,我不明白为什么这两个循环返回不同的结果。
您没有到达 arr 中的最后一个条目。
for ( let i = 0; i < arr.length - 1; i++){
for (let j = i + 1; j < arr.length - 1; j++ )
应该是
for ( let i = 0; i <= arr.length - 1; i++){
for (let j = i + 1; j <= arr.length - 1; j++ )