Лучшие решения для задач Microsoft на собеседовании. Наибольший K такой, что в массиве существуют как K, так и -K.
Описание:
Напишите функцию, которая для массива A из N целых чисел возвращает наибольшее целое число K ›0, так что оба значения K и -K существуют в массиве A. Если такого целого числа нет, функция должна возвращать 0.
Пример 1:
Input: [3, 2, -2, 5, -3] Output: 3
Пример 2:
Input: [1, 2, 3, -4] Output: 0
Решение:
Эта задача очень проста. Это немного сложнее, чем найти максимальное значение в заданном массиве. Единственное, что нам нужно добавить, это проверить, содержит ли этот массив такое же значение с противоположной стороны от нуля. Другими словами, мы должны проверить все положительные значения в массиве и проверить, есть ли значения с таким же абсолютным значением, но с отрицательным знаком. Единственная структура данных, которая имеет постоянную сложность для доступа к несортированным элементам, это хеш-таблица.
Итак, сначала мы добавляем все заданные значения в хеш-таблицу.
Затем пройдите по всем элементам таблицы и проверьте, имеет ли положительный элемент такое же абсолютное значение, но с отрицательным знаком.
Каждый раз, если мы встречаем абсолютное значение больше, чем уже найденное максимальное значение, сохраняйте его как новое максимальное значение.
Код C ++:
int solution(const vector<int>& input){ unordered_set<int> s(input.begin(),input.end()); int max_value = 0; for(auto n : s){ if((abs(n) > max_value) && (s.count(-n) != 0)) { max_value = n; } } return max_value; }
Репозиторий с полной версией проекта вы можете найти здесь: https://github.com/jolly-fellow/microsoft/tree/master/largest_integer
Вернуться к оглавлению.