UniLecs #169. Наименьший общий элемент
UniLecsЗадача: даны 3 числовых массива, отсортированные по возрастанию. Необходимо найти наименьшее число, которое является общим для всех исходных массивов.
Входные данные: arr1, arr2, arr3 - числовые массивы, элементы массива - целые числа по модулю не превосходящие 10^5. Размеры массивов от 1 до 10^5.
Вывод: наименьший общий элемент
Пример:
arr1 = [ 1, 5, 10, 11, 90 ]
arr2 = [ -10, 5, 7, 8, 40 ]
arr3 = [ 0, 5, 6, 12, 20, 30 ]
Answer: 5
Идея: ключом к решению задачи является тот факт, что все массивы отсортированы по возрастанию. Т.е. минимальные элементы находятся сначала.
Соот-но заведем 3 независимых итератора для каждого из массивов. Начнем обход с начала массивов.
1. Если значения элементов массивов на определенной итерации равны, значит мы нашли искомое решение.
2. Иначе проверим итератор, который указывает на минимальное значение из 3х и увеличим этот итератор на единицу. Это значит, что в других 2х массивах нет элементов меньших чем значение в первом, поэтому мы увеличиваем именно итератор наименьшего значения, т.к. нам нужно найти общее значение для всех 3х массивов.
3. Если хотя бы один из 3х итераторов достиг конца массива, то выводим сообщение, что общего наименьшего значения не существует.
Детали реализации смотрим ниже.
Реализация:
https://gist.github.com/unilecs/cfa43f4763d82fb14e90a70dfcebd22d
Play-test: https://dotnetfiddle.net/aEbyrF