freeCodeCamp/curriculum/challenges/portuguese/10-coding-interview-prep/algorithms/pairwise.md

2.2 KiB

id title challengeType forumTopicId dashedName
a3f503de51cfab748ff001aa De par em par 5 301617 pairwise

--description--

Dado um array arr, encontre pares de elementos cuja soma seja igual ao segundo argumento arg e retorne a soma de seus índices.

Você pode usar vários pares que tenham os mesmos elementos numéricos, mas com índices diferentes. Cada par deve utilizar os menores índices disponíveis. Quando um elemento tiver sido usado, ele não pode ser reutilizado para fazer par com outro elemento. Por exemplo, pairwise([1, 1, 2], 3) cria um par [2, 1] usando o 1 no índice 0 ao invés do 1 no índice 1, porque 0+2 < 1+2.

Um outro exemplo: pairwise([7, 9, 11, 13, 15], 20) retorna 6. Os pares que somam 20 são [7, 13] e [9, 11]. Em seguida, podemos escrever o array com seus índices e valores.

Índice 0 1 2 3 4
Valor 7 9 11 13 15

Abaixo, pegaremos os respectivos índices e os somaremos.

7 + 13 = 20 → Índices 0 + 3 = 3
9 + 11 = 20 → Índices 1 + 2 = 3
3 + 3 = 6 → Retorna 6

--hints--

pairwise([1, 4, 2, 3, 0, 5], 7) deve retornar 11.

assert.deepEqual(pairwise([1, 4, 2, 3, 0, 5], 7), 11);

pairwise([1, 3, 2, 4], 4) deve retornar 1.

assert.deepEqual(pairwise([1, 3, 2, 4], 4), 1);

pairwise([1, 1, 1], 2) deve retornar 1.

assert.deepEqual(pairwise([1, 1, 1], 2), 1);

pairwise([0, 0, 0, 0, 1, 1], 1) deve retornar 10.

assert.deepEqual(pairwise([0, 0, 0, 0, 1, 1], 1), 10);

pairwise([], 100) deve retornar 0.

assert.deepEqual(pairwise([], 100), 0);

--seed--

--seed-contents--

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

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

--solutions--

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);