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

2.2 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
a3f503de51cfab748ff001aa A coppie 1 301617 pairwise

--description--

Dato un array arr, trova coppie di elementi la cui somma è uguale al secondo argomento arg e restituisci la somma dei loro indici.

È possibile utilizzare più coppie che hanno gli stessi elementi numerici ma indici diversi. Ogni coppia dovrebbe utilizzare i più bassi indici disponibili. Una volta che un elemento è stato usato, non può essere riutilizzato per accoppiarsi con un altro elemento. Per esempio, pairwise([1, 1, 2], 3) crea una coppia [2, 1] usando l1 allindice 0 piuttosto che l1 allindice 1, perché 0+2 < 1+2.

Per esempio pairwise([7, 9, 11, 13, 15], 20) restituisce 6. Le coppie la cui somma è 20 sono [7, 13] e [9, 11]. Possiamo poi scrivere l'array con i loro indici e valori.

Index 0 1 2 3 4
Value 7 9 11 13 15

Qui sotto prenderemo i loro indici corrispondenti e ne faremo la somma.

7 + 13 = 20 → Indices 0 + 3 = 3
9 + 11 = 20 → Indices 1 + 2 = 3
3 + 3 = 6 → Return 6

--hints--

pairwise([1, 4, 2, 3, 0, 5], 7) dovrebbe restituire 11.

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

pairwise([1, 3, 2, 4], 4) dovrebbe restituire 1.

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

pairwise([1, 1, 1], 2) dovrebbe restituire 1.

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

pairwise([0, 0, 0, 0, 1, 1], 1) dovrebbe restituire 10.

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

pairwise([], 100) dovrebbe restituire 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);