题目:
有一个能力数组[7,9,11,13,15],按照最佳组合值为20来计算,只有7+13和9+11两种组合。而7在数组的索引为0,13在数组的索引为3,9在数组的索引为1,11在数组的索引为2。
所以我们说函数:pairwise([7,9,11,13,15],20) 的返回值应该是0+3+1+2的和,即6。
我们可以通过表格来更直观地查看数组中索引和值的关系:
Index 0 1 2 3 4
Value 7 9 11 13 15
任务:帮右边的pairwise函数实现上面的功能。
例子:
pairwise([1, 4, 2, 3, 0, 5], 7) 应该返回 11.
pairwise([1, 3, 2, 4], 4) 应该返回 1.
pairwise([1, 1, 1], 2) 应该返回 1.
pairwise([0, 0, 0, 0, 1, 1], 1) 应该返回 10.
pairwise([], 100) 应该返回 0.
注意:匹配了一次之后数组项就不能再用了。那就把它设为false吧。
代码:
<script type="text/javascript">
//第一种比较容易理解
function pairwise(arr, arg) {
if (arr.length === 0) {
return 0;
}
var sum = 0;
for (var i = 0; i < arr.length; i++) {
if (typeof(arr[i]) == 'number') {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] + arr[j] === arg) {
sum = sum + i + j;
arr[i] = 'false';
arr[j] = 'false';
}
}
}
}
return sum;
}
//第二种方法
function pairwise(arr, arg) {
var a = arr.reduce(function(prev, currv, index, array) {
var l = array.length;
for (var i = index + 1; i < l; i++) {
if (array[index] + array[i] === arg) {
arr[index] = "false";
arr[i] = "false";
return prev + i + index;
}
}
return prev;
}, 0);
return a;
}
</script>