diff --git a/find_second_max.py b/find_second_max.py new file mode 100755 index 0000000..4e63586 --- /dev/null +++ b/find_second_max.py @@ -0,0 +1,60 @@ +def find_second_max(array): + # Проверяем входные данные + if array and len(array) > 0: + # Максимальное значение - первое значение + my_max = array[0] + # Второе по величине число пока не найдено + my_second_max = None + + # Проходим все элементы массива + for i in array: + # Если текущий элемент массива больше максимального + if i > my_max: + # Бывшее до сих пор максимальное значение - становится вторым по величине + my_second_max = my_max + # Текущий элемент становится максимальным значением + my_max = i + # Если текущий элемент массива меньше максималььного + elif i < my_max: + # Если второе по величине значение еще не найдено + if my_second_max is None: + # Текущий элемент становится вторым по величине значением + my_second_max = i + # Если второе по величине значение уже определено + else: + # Если текущий элемент больше текущего второго по величине значения + if i > my_second_max: + # Текущий элемент становится вторым по величине значением + my_second_max = i + + # Вариант когда текущий элемент равен минимальному значению, мы не рассматриваем, + # т.к. он никак не влияет на найденные значения + + return my_second_max + + # Если массив пустой или вообще не имеет значения + return None + + +################################################# +def verifier(test_name, actual, expected): + print(test_name) + if actual != expected: + print("=======> FAILED! <=======") + print(f"Got value <{actual}>") + print(f"Expected value is <{expected}>") + else: + print("PASSED") + print() + + +second_max_tests = [([1, 6, 3, 6, 54, 3, 6, 3, 1, 2, 8], 8), + ([2, 2, 2, 2, 2, 2, 2, 2, 2], None), + ([2, 2, 2, 2, 2, 2, 2, 2, 4], 2), + ([], None), + ([1, 0, -1], 0), + ([4, -7, 6, 23, -5, 23, -4, 5, 7, 100], 23)] + +for i in range(len(second_max_tests)): + verifier(f"Second max test {i+1}", find_second_max(second_max_tests[i][0]), second_max_tests[i][1]) +