题目:

有一个能力数组[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>