Задать вопрос
dethain
@dethain
Верстальщик

Код не проходит проверку по времени, как ускорить?

Делаю олимпиадную задачу, её суть такова:
Цель в данной задаче — реализовать простую телефонную книгу, поддерживающую три следующих типа запросов. С указанными ограничениями данная задача может быть решена с использованием таблицы с прямой адресацией.

Первый ввод - количество последующих запросов.

add number name: добавить запись с именем name и телефонным номером number. Если запись с таким телефонным номером уже есть, нужно заменить в ней имя на name.

del number: удалить запись с соответствующим телефонным номером. Если такой записи нет, ничего не делать.

find number: найти имя записи с телефонным номером number. Если запись с таким номером есть, вывести имя. В противном случае вывести not found (без кавычек).

Другими словами, необходимо реализовать структуру данных, эффективно обрабатывающую запросы вида add number name, del number и find number.

Мой код работает, но он не проходит последний тест (в нем очень много данных). Как этот код можно значительно ускорить?
import re

countOperation = int(input())
phoneBook = []

def add(number, name):
  for i in phoneBook:
    if i[0] == number:
      i[1] = name
      return
  
  phoneBook.append([number, name])

def delete(number):
  for i in phoneBook:
    if i[0] == number:
      phoneBook.remove(i)
      return

def find(number):
  for i in phoneBook:
    if i[0] == number:
      print(i[1])
      return
  print('not found')

while countOperation > 0:
  operation = input().split(' ')

  if (operation):
    command = operation[0]
    number = operation[1]

    try:
      name = operation[2]
    except IndexError:
      name = None

    if (command == 'add'):
      add(int(number), name)

    elif (command == 'del'):
      delete(int(number))

    elif (command == 'find'):
      find(int(number))
      
  countOperation -= 1

Я не знаю что еще можно придумать что бы ускорить его.
  • Вопрос задан
  • 231 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
alternativshik
@alternativshik
Поиск перебором? Ну так конечно не будет.
Используй dict phoneBook = {phone: {'name': Name}}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Hackerman1
@Hackerman1
17 лет, плохое зрение.
Может используешь другой язык программирования? Питон сам по себе медленный.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Нужно использовать тип данных «словарь» (в Си++ std::map/unordered_map), а не прямой поиск.
Если в Питоне, как в PHP, массивы могут иметь любой индекс (ну не знаю я, не знаю) — вот вам и словарь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы