У вас решение сейчас имеет сложность O(n^3), потому что вы используете два вложенных цикла до n и также вызываете min/max, которые проходятся по всему массиву. Однако ограничения задачи указывают, что n < 10^5. С такими ограничениями решение должно быть возможно в течение 3 секунд при сложности O(n log n). Подумайте, как его можно улучшить?
Подсказка:
- На каждой итерации вы можете взять минимальный элемент, а затем два самых маленьких, и так далее.
- На второй итерации вам уже не нужно искать минимум, вы уже его знаете. Вас интересуют только оставшиеся числа.
- На третьей итерации вам уже известно два числа. Вы можете переиспользовать предыдущие вычисления.
Скажите, что можно сделать с входным массивом, чтобы получать несколько самых маленьких элементов быстро? Помните, что вам нужно уложиться в O(n log n).
Вы можете использовать функцию b = a[:] для создания копии массива без использования дополнительных функций. Также это относится к циклам - можно использовать более эффективный способ. Что касается условия задачи, извините, но мне голова уже пухнет от чтения, поэтому я не могу помочь дальше. Я думаю, кто-то более терпеливый поможет вам. Но похоже, что в алгоритме также есть недочеты.
Также, возможно, стоит отсортировать bluelist и redlist заранее и затем проходить по обоим массивам по одному элементу. Если вам нужно взять минимальный элемент, берите его из отсортированного массива, если максимальный - из другого массива.