Фон
Это законодательство о проблеме является частью знакомства о выучении LeetCode для введения структур данных с массивами – 101. Под подзаголовкой вывод.
Постановка задачи
Учитывая непустое массив целых чисел, верните третий максимальный номер в этом массиве. Если он не существует, верните максимальный номер. Сложность времени должна быть в O (n).
Пример 1.
Input: [3, 2, 1] Output: 1 Explanation: The third maximum is 1.
Пример 2.
Input: [1, 2] Output: 2 Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
Пример 3.
Input: [2, 2, 3, 1] Output: 1 Explanation: Note that the third maximum here means the third maximum distinct number. Both numbers with value 2 are both considered as second maximum.
Решение подход 1.
- Интуитивно первоначальная мысль, наступила, заключалась в том, чтобы сохранить расчет массу от массива. Но это также означало бы каждый раз, когда найден максимальный элемент. Тогда нам придется удалить один и тот же элемент из массива. Затем снова рассчитайте максимум от оставшихся элементов в массиве.
Проблемы с решением подхода 1
- Встроенный удален не может быть использован для удаления элемента, поскольку в списке могут быть дубликаты элементы. Удаление будет удалять только первое вхождение элемента.
Решение подход 2
- Создайте максимум переменной и храните в нем некоторое произвольное значение.
- Если длина списка больше 3. Затем итерации по списку. Если значение элемента больше, чем значение максимальной переменной. Храните значение элемента максимум.
- Храните некоторую произвольную ценность в переменной Second_max. Итерация по списку. Если значение элемента не равно стоимости максимума. Затем снова сравните все значения элемента со значением Second_max. Если значение элемента больше, чем сохраненное значение в Second_max. Заменять.
- Результатом будет третий максимальный элемент.
- Иначе, если длина списка не превышает 3. Затем верните максимум массива.
import sys class Solution: def thirdMax(self, nums: List[int]) -> int: maximum = -sys.maxsize if len(nums) >= 3: for element in nums: if element > maximum: maximum = element second_max = -sys.maxsize for element in nums: if (element != maximum) and (second_max < element): second_max = element third_max = -sys.maxsize for element in nums: if (element != maximum) and (element != second_max) and (third_max < element): third_max = element if (maximum != -sys.maxsize) and (second_max != -sys.maxsize) and (third_max != -sys.maxsize): result = third_max else: result = max(nums) else: result = max(nums) return result
Учащиеся
- Сложность времени вышеуказанного раствора является O (n).
- Начальное значение максимального, Second_max, Three_max должен быть номер, который не существует в исходном списке. В противном случае это приведет к неожиданному выводу.
Оригинал: “https://dev.to/mridubhatnagar/day-19-third-maximum-number-521k”