В своем путешествии по смене карьеры и переходу на штатного разработчика я пытался найти время, чтобы писать код везде и всегда. Это означает перед работой, после работы, иногда во время работы (конечно, только во время простоя), в выходные, когда мой сын спит, и т. Д. Вы поняли.

Чтобы бросить себе вызов и заставить свой мозг работать в режиме программиста, когда время ограничено, я часто ищу в Google что-то вроде «____ популярных вопросов на собеседовании» и заполняю пустое поле «массив», «строка», «сортировка» алгоритм »или что-то еще, над чем я думаю, что мне нужно поработать.

Сегодня я наткнулся на один, который мне повеселился - «Как найти все пары целых чисел в массиве, сумма которых равна заданному числу?».

Давай подумаем. У нас есть массив, состоящий как из положительных, так и из отрицательных чисел (назовем его «обр»), и нам нужно найти все пары, которые равны данному числу (назовем его «n ).

Как и в случае с большинством вопросов, я уверен, что для этого есть несколько решений, но мы решим его очень простым способом. Кто-то назвал бы это «грубой силой», я назову это «понятным».

Во-первых, нам нужно создать пустой массив для хранения нашего результата. Назовем это «комбо». Затем нам нужно найти способ сравнить каждое число в массиве с каждым другим числом в массиве (включая его самого). Похоже, сейчас самое время использовать вложенный цикл for! Таким образом, мы можем выполнить полную итерацию по массиву для каждого индекса и найти любые совпадения.

Затем нам нужно настроить средство проверки, чтобы видеть, если каждый элемент по выбранному индексу в массиве складывается с нашим входным числом. Мы можем легко добиться этого, сравнив сумму двух наших переменных (в данном случае arr [i] и arr [j]) с нашим входным числом.

Если наш оператор IF находит совпадение, мы продолжим и вставим подмассив, содержащий два числа, в наш массив «комбо».

Наконец, мы записываем наш результат в консоль, проверяем, работает ли наша программа должным образом, а затем возвращаемся к нашему обычному расписанию рабочего дня, прежде чем кто-либо это заметит. Вечеринка!

Не стесняйтесь комментировать любые другие решения этой проблемы! Что-нибудь рекурсивное, что быстрее, чем O (n ^ ²)? Давай послушаем!