Files
freeCodeCamp/curriculum/challenges/english/08-coding-interview-prep/algorithms/pairwise.english.md
Mo Zargham 437ba8b103 fix(curriculum): Read-search-ask link now point to correct url as noted in the issue (#37753)
* fix: broken Read-search-ask link now point to correct url

* fix: changed link to original forum link with more views

* fix: changed http links to correct version

* fix: link in help modal
2019-11-19 19:54:48 -05:00

2.7 KiB

id, title, challengeType, forumTopicId
id title challengeType forumTopicId
a3f503de51cfab748ff001aa Pairwise 5 301617

Description

Given an array arr, find element pairs whose sum equal the second argument arg and return the sum of their indices. You may use multiple pairs that have the same numeric elements but different indices. Each pair should use the lowest possible available indices. Once an element has been used it cannot be reused to pair with another element. For instance, pairwise([1, 1, 2], 3) creates a pair [2, 1] using the 1 at index 0 rather than the 1 at index 1, because 0+2 < 1+2. For example pairwise([7, 9, 11, 13, 15], 20) returns 6. The pairs that sum to 20 are [7, 13] and [9, 11]. We can then write out the array with their indices and values.
Index01234
Value79111315
Below we'll take their corresponding indices and add them. 7 + 13 = 20 → Indices 0 + 3 = 3
9 + 11 = 20 → Indices 1 + 2 = 3
3 + 3 = 6 → Return 6 Remember to use Read-Search-Ask if you get stuck. Try to pair program. Write your own code.

Instructions

Tests

tests:
  - text: <code>pairwise([1, 4, 2, 3, 0, 5], 7)</code> should return 11.
    testString: assert.deepEqual(pairwise([1, 4, 2, 3, 0, 5], 7), 11);
  - text: <code>pairwise([1, 3, 2, 4], 4)</code> should return 1.
    testString: assert.deepEqual(pairwise([1, 3, 2, 4], 4), 1);
  - text: <code>pairwise([1, 1, 1], 2)</code> should return 1.
    testString: assert.deepEqual(pairwise([1, 1, 1], 2), 1);
  - text: <code>pairwise([0, 0, 0, 0, 1, 1], 1)</code> should return 10.
    testString: assert.deepEqual(pairwise([0, 0, 0, 0, 1, 1], 1), 10);
  - text: <code>pairwise([], 100)</code> should return 0.
    testString: assert.deepEqual(pairwise([], 100), 0);

Challenge Seed

function pairwise(arr, arg) {
  return arg;
}

pairwise([1,4,2,3,0,5], 7);

Solution

function pairwise(arr, arg) {
  var sum = 0;
  arr.forEach(function(e, i, a) {
    if (e != null) {
      var diff = arg-e;
      a[i] = null;
      var dix = a.indexOf(diff);
      if (dix !== -1) {
        sum += dix;
        sum += i;
        a[dix] = null;
      }
    }
  });
  return sum;
}

pairwise([1,4,2,3,0,5], 7);