Итак, я читал статью, в которой человек говорил о процессе собеседования на стажировку, и в ней ему задали 2 вопроса, связанных с алгоритмом. Я решил решить их сам и посмотреть, как я подойду к такой проблеме.

Вот проблема — вам дан массив целых чисел [1,2,1,3,3], и вы хотите найти:

  1. Первое повторяющееся число в массиве. Ответ будет 1.
  2. Первое повторяющееся число подряд. Тогда ответ будет 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] и возврата числа, если оно равно.

Не забудьте оставить свой отзыв или предложения в комментариях ниже.

Подпишись на меня в Твиттере".