挑战:
给定数组arr,查找其和等于第二个参数arg的元素对,并返回其索引的和。
如果具有相同数值元素但可能有不同索引的多对,则返回最小的索引和。一旦使用了一个元素,它就不能被重用来与另一个元素配对。
例如,pairwise([7, 9, 11, 13, 15], 20)返回6。
我的代码(工作,通过所有验证)如下:
function pairwise(list, sum) {
// noprotect
var innerCounter,
outerCounter,
used = {},
returnValue = 0;
for( outerCounter = 0 ; outerCounter < list.length-1 ; outerCounter++){
if( used[outerCounter] )
continue;
for( innerCounter = outerCounter+1 ; innerCounter < list.length ; innerCounter++){
if( used[innerCounter] )
continue;
if( list[innerCounter] + list[outerCounter] == sum ){
used[innerCounter] = true;
returnValue = returnValue + innerCounter + outerCounter;
break;
}
}
}
return returnValue;
}我对sum作为参数名进行了一些内部辩论,因为我们还返回了一个sum。但是我坚持使用returnValue作为返回值,sum作为参数。从样式到算法,任何关于这方面的反馈都是受欢迎的。
发布于 2016-07-10 00:25:25
我唯一的评论将是风格,所以可能更多的是一个意见问题。欢迎任何反对意见。
您的所有代码都是捆绑在一起的,并且不像可能的那样容易阅读。
)
在if和其他块上始终使用大括号通常是有益和一致的,即使只有一条语句。如果您稍后回到代码并注释/添加行,那么很容易引入不受欢迎的功能。
if(someValue)
//doThis();
alwaysDoThis();returnValue = returnValue + innerCounter + outerCounter;可以缩短为
returnValue += innerCounter + outerCounter;https://codereview.stackexchange.com/questions/134380
复制相似问题