Я только начал свое путешествие по LeetCode (я опоздал, чтобы запрыгнуть на эту подножку, потому что мне не нравится чувствовать себя последователем). Как и многие начинающие и ищущие работу, я начинаю с «Основных вопросов на собеседовании», и мне уже бросили вызов. Раньше я обращался к Google, чтобы попытаться найти ответы, но я решил придерживаться этого и летать в одиночку (я не болван и заслуживаю победы!).

Я написал код так, как я думал, что должен. Во-первых, я написал цикл for для перебора каждого индекса этого отсортированного массива. У меня возникло искушение напрячь свои мускулы ES6 с помощью цикла for of, но вскоре я понял, что отсутствие доступа к индексу элемента значительно усложнит следующий шаг.

Затем мне нужно было определить, идентичен ли текущий элемент, который я повторял, своему следующему. По этой причине мне пришлось использовать традиционный цикл for вместо цикла for of, чтобы отслеживать массивы.

Для этого условного выражения я сначала попытался использовать оператор if:

Если этот элемент идентичен своему следующему соседу, соедините его и продолжите.

Или я так думал! Тесты сработали для первых шестнадцати случаев, но не для остальных. После того, как я напряг свой мозг в течение нескольких минут, у меня было прозрение: пока условно.

Моим первым языком (или, как я его называю, языком-тренажером), который я выучил, был Ruby. Ruby — это все о циклах: циклы for, циклы if, циклы while, циклы until и т. д. Хотя (без каламбура) JavaScript тоже любит свои циклы, вы не увидите, чтобы нишевые циклы использовались так часто, как в Ruby. . Ключом к решению этой проблемы было использование цикла while. Как только я это реализовал, все тесты прошли!

Я смог прийти к решению с помощью одной из визуализаций, предоставленных LeetCode:

Затем они продолжают объяснять более подробно:

По сути, как только элемент встречается, вам просто нужно обойти его дубликаты и перейти к следующему уникальному элементу.

Подчеркнутое ими слово обойти чрезвычайно важно (нет, Ребекка, вот почему они выделили его жирным шрифтом). Для меня это было больше о том, как я визуализировал и говорил о перемещении по массиву. Это не было стаккато оператора if — мне не нужно было останавливаться на каждом элементе и проверять. Это было выражение легато while:

ПОКА этот элемент идентичен своему следующему соседу, соедините его и продолжайте.

Мне очень понравилось это упражнение и подсказки, которые они мне дали. Было здорово поэкспериментировать с кодом и подумать о нем в разных (например, музыкальных) терминах.