Rolf B: Mathematik zum Wochenende

Beitrag lesen

Hallo Gunnar,

Funzt schlecht. Weil ineffizient. Zum einen kann man die Schleife abbrechen, sobald ein Dividuum gefunden wurden. Zum anderen kann man, denke ich, durchaus die Reflexivität der Gleichheit beibehalten und die innere Schleife bei i+1 starten. Die äußere Schleife braucht dann eigentlich nur bis a.length-1 zu laufen, aber das ständige Minus kostet mehr Zeit als ein Dummy-Durchlauf der inneren Schleife.

Es sei denn natürlich, Du möchtest dem vermenschlichenden Aspekt Rechnung tragen, dass die Zahl foo meint, sie wäre der Zahl bar gleich, während bar das ganz anders sieht. Dann muss man natürlich a[i] !== a[j] und a[j] !== a[i] prüfen. Ich habe das also doch mal vorgesehen, aber nicht über die Schleifen, sondern direkt im if

const a = [5, 6, 8, 9];

console.log(checkForTwins(a) ? "true" : "false");

function checkForTwins(arrayOfIndividuums)
{
   for (let i = 0; i < arrayOfIndividuums.length; i++)
      for (let j = i+1; j < arrayOfIndividuums.length; j++)
         if (arrayOfIndividuums[i] === arrayOfIndividuums[j] &&
             arrayOfIndividuums[j] === arrayOfIndividuums[i])
            return true;
         
   return false;
}

Einziger Kritikpunkt könnte das Input-Array [1, 2, NaN, NaN] sein, das liefert false. Weil der blöde NaN sich selbst nicht wiedererkennt. Aber der ist ja eigentlich auch gar keine Zahl.

PS: Wie steuert man ein nicht-umbrechbares Space in Code ein? Ich habe jetzt Alt+0160 verwendet, aber "\ " wäre schicker.

Rolf

--
sumpsi - posui - clusi