Řešení problému:Najděte odd int

V tomto příspěvku se budu zabývat svým řešením problému "Find the odd int", což by mohla být potenciální otázka pro rozhovor!

Při zadání pole celých čísel tedy najděte celé číslo, které se objevuje lichý počet opakování.

Zní to dost jednoduše, že? Možná ne tolik, pokud jste začínající vývojář. Po této procházce se však s tímto budete cítit docela sebejistě. Pokud byste si to chtěli vyzkoušet, než skutečně uvidíte moje řešení problému, neváhejte otevřít nový repl.it.

Nejprve začnu s nějakým pseudokódem . Máme pole celých čísel, která vypadá nějak takto.

Je zde pouze jedno celé číslo, které se objevuje lichý počet. Nebojte se zkoušet to počítat a spočítat si to v hlavě, můžeme na to vytvořit funkci!

Víme, že potřebujeme způsob, jak sledovat každou položku v poli. Potom musíme spočítat, kolikrát se každá položka objevila v poli. Nechceme ručně přiřazovat proměnné ke každému číslu nebo nějakou jednoduchou zkratku, jako je tato, chceme, aby naše funkce pracovala i s tím největším z polí. Snadný způsob, jak sledovat položku a kolikrát se objeví, lze provést v objektu. Také mějme na paměti, že budeme muset vrátit jediné celé číslo, které se objevuje nejvíce, můžeme pro to vytvořit také proměnnou.

Takže máme náš cíl sledovat položky z pole, pak máme výsledek. Nyní bude naším dalším krokem smyčka přes pole. Uvnitř našeho objektu chceme od každé hodnoty pouze jednu, takže to musíme mít také na paměti, pravděpodobně jako podmínku . V kódu můžeme použít forEach smyčka přes pole a pak jednoduše vytvořte podmínku pro každou položku. Pokud položka existuje jako klíč v našem counterObject , pak jednoduše zvýšíme číslo v tomto indexu objektu o 1. Pokud položka neexistuje v našem counterObject , pouze vytvoříme klíč a nastavíme jej na základní číslo 1, které představuje první výskyt tohoto čísla v našem poli. V kódu to bude vypadat nějak takto:

Nyní, když v této funkci hodím protokol konzoly po forEach funkce, uvidíme ošklivý objekt, jako je tento

Super, takže teď vidíme, že náš objekt má spoustu klíčů reprezentujících každé číslo, na které jsme narazili v našem poli. Každá položka má také odpovídající číslo, kolikrát se objevila v našem poli. Úžasný! Nyní máme přesně to, co jsme chtěli, ale ne tak docela. Toto číslo ještě musíme vrátit které se objevily podivně mnohokrát. Vidíme, že číslo 7 se objevilo třikrát a zbytek celých čísel je sudý. Jsme na správné cestě, ale teď musíme myslet na podmínku a také na náš objekt. Můžeme zacyklit jednoduchou smyčkou 'for-in', ale musíme zkontrolovat, zda každé číslo není liché. Snadný způsob, jak toho dosáhnout, je použít operátor zbytku, '%' (také označované jako modulo )! Vím, že mnoho lidí, kteří nejsou příliš matematicky důvtipní, se tohoto bubáka děsí, ale nezlobte se. Naše implementace s ním je velmi jednoduchá. Protože operátor zbytku v zásadě vrací číslo, které zbylo poté, co byla položka co nejvícekrát vydělena číslem napravo, aniž by vrátil desetinné místo.

Abychom toto vše měli na paměti, abychom zjistili, zda jsou tyto hodnoty sudé nebo liché, můžeme jednoduše získat zbytek poté, co bylo každé číslo znovu a znovu děleno 2. Pokud je číslo sudé, je dělitelné 2, takže výsledek bude 0. Chceme však toto odlehlé liché číslo, které místo toho vrátí zbytek 1. Pomocí této podmínky můžeme přiřadit naši výslednou proměnnou, kterou jsme vytvořili dříve na jediné číslo, které splňuje tuto podmínku.

Pojďme to implementovat do našeho kódu!

Sladké! Takže máme hotovo, ne? Vrátili jsme náš výsledek a je to liché číslo .
Počkejte...

Uf, ještě více kroků! Vracíme řetězec, protože náš objekt převedl číslo na řetězec! Nebojte se. Můžeme přidat ještě jeden bit kódu, abychom to opravili.

Bum, číslo. Toto je pro mě nejčitelnější řešení, ale existuje mnoho implementací tohoto problému. Neváhejte a podívejte se na další řešení na codewars, ale nejprve budete muset vyřešit problém. Díky za přečtení!