Pairwise
找到你的另一半 都說優秀的程序員擅長面向對象編程,但卻經常找不到另一半,這是為什麽呢?因為你總是把自己局限成為一個程序員,沒有打開自己的思維。 這是一個社群的時代啊,在這裏你應該找到與你有相同價值觀但又互補的另一半。 譬如:你編程能力強,估值11分,如果以20分為最佳情侶來計算,你應該找一個設計能力強,估值為9分的女生。 那麽當你遇到一個設計能力為9分的女生,千萬別猶豫,大膽去表白。千萬別以為後面的瓜比前面的甜哦。 舉個例子:有一個能力數組[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。
function pairwise(arr, arg) {
var pairwiseIndex = [];
var prevIndex = -1;
for(var i=0;i < arr.length; i++)
{
var checkIndex = arr.indexOf(arg - arr[i]);
//要找的pair值跟上次一樣時會找到跟上莿桐一個位置的元素,因為indexOf是找第1個符合條件的元素,故從上一次找到的index的後一個位置開始找
if(pairwiseIndex.indexOf(arg - arr[i]) != -1 && prevIndex == arr.indexOf(arg - arr[i]) )
checkIndex = arr.indexOf(arg - arr[i], prevIndex + 1);
if(checkIndex != -1 && pairwiseIndex.indexOf(i) == -1 && pairwiseIndex.indexOf(checkIndex) == -1 && i != checkIndex )
{
pairwiseIndex.push(i);
pairwiseIndex.push(checkIndex);
}
prevIndex = checkIndex;
}
return (pairwiseIndex.length > 0) ? pairwiseIndex.reduce(function(previousVal, currentVal, index, array)
{
return previousVal + currentVal;
}) : 0;
}
pairwise([1,4,2,3,0,5], 7);
pairwise([1, 3, 2, 4], 4);
pairwise([1, 1, 1], 2);
pairwise([0, 0, 0, 0, 1, 1], 1);
測試的正確結果
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.
Solution:
**P.S. / Reference: Array.reduce()