Итак, я читал статью, в которой человек говорил о процессе собеседования на стажировку, и в ней ему задали 2 вопроса, связанных с алгоритмом. Я решил решить их сам и посмотреть, как я подойду к такой проблеме.
Вот проблема — вам дан массив целых чисел [1,2,1,3,3], и вы хотите найти:
- Первое повторяющееся число в массиве. Ответ будет 1.
- Первое повторяющееся число подряд. Тогда ответ будет 3.
Первая проблема была решена с помощью простой хеш-таблицы или словаря. Ключом этой хеш-карты будут целые числа в данном массиве, а значением будет количество или количество раз, когда целое число встречается.
func identifyFirstRecurringNumber(from array: [Int]) -> Int { // dictionary = [key : value] var numberDict = [Int : Int]() for num in array { if let count = numberDict[num] { numberDict[num] = count + 1 return num } else { numberDict[num] = 1 } } //If there is no recurrent values in the hash return 0 } //Output = 1
В функции, определенной выше, цикл for проверяет, есть ли какое-либо значение против ключа (число).
if let count = numberDict[num] { numberDict[num] = count + 1 return num } else { numberDict[num] = 1 }
Если значение равно нулю, то ему присваивается 1. В противном случае, если значение уже присутствует, оно увеличивается на 1.
В тот момент, когда он находит другое значение для того же ключа, он увеличивает счетчик и возвращает это число.
2. Я решил вторую проблему, используя простую итерацию. Для этого также есть рекурсивное решение, которое я попробую позже, или вы можете сделать это и опубликовать его в комментариях ниже :)
Во втором вопросе говорится, что нужно найти первые последовательные повторяющиеся числа в массиве. В этом вопросе я просто использовал цикл for для перебора массивов и сравнил текущее число со следующим числом в массиве.
func findFirstConsecutiveRecurrent(from array: [Int]) -> Int { var tempNumber = 0 for (i,c) in array.enumerated() { tempNumber = c if (tempNumber == array[i + 1]) { return tempNumber } } return 0 } //output = 3
Массив передается, и в цикле for я использую array.enumerated(), чтобы получить элемент “c” и его индекс “i”.
Тогда это просто вопрос сравнения текущего числа со следующим в массиве с помощью array[i + 1] и возврата числа, если оно равно.
Не забудьте оставить свой отзыв или предложения в комментариях ниже.
Подпишись на меня в Твиттере".