Часть 1. Найдите максимальное число в слайсе.
Часть 2. Найдите два максимальных числа. Решение через сортировку не подходит:
нужен один проход без дополнительной памяти.
// Max возвращает максимальный элемент; ok == false для пустого слайса.
func Max(nums []int) (m int, ok bool)
// TopTwo возвращает два наибольших элемента, first >= second.
// Элементы берутся по позициям: в [5, 5, 3] два максимальных — 5 и 5.
// ok == false, если элементов меньше двух.
func TopTwo(nums []int) (first, second int, ok bool)
Примеры
Max([3, 9, 1]) → 9, true
Max([]) → 0, false
TopTwo([3, 9, 1, 7]) → 9, 7, true
TopTwo([5, 5, 3]) → 5, 5, true
TopTwo([-8, -3, -5]) → -3, -5, true
TopTwo([4]) → 0, 0, false
Ограничения
- Числа любые, включая отрицательные и
math.MinInt.
- Входной слайс не изменять. O(n) по времени, без аллокаций.
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.