Удалить друзья Hackerearth: Ошибка выполнения - NZE C: IndexError: индекс deque вне диапазона - PullRequest
0 голосов
/ 17 января 2020

Постановка проблемы (https://www.hackerearth.com/problem/algorithm/remove-friends-5)

Я застрял в этой проблеме. Пожалуйста, укажите, что не так и что можно сделать для получения правильного результата.

Спасибо за помощь

Получив докторскую степень, Христос ie стал знаменитостью в своем университете и ее профиль на Фейсбуке полон запросов на добавление в друзья. Будучи милой девушкой, она есть, Христос ie принял все запросы.

Теперь Кулдип завидует тому вниманию, которое она получает от других парней, поэтому он просит ее удалить некоторых парней из нее. список друзей. Чтобы избежать «сцены», Христос ie решает удалить некоторых друзей из списка своих друзей, так как она знает популярность каждого из своих друзей, она использует следующий алгоритм для удаления друга.

Алгоритм удаления (друг):

         DeleteFriend=false

 for i = 1 to Friend.length-1

 if (Friend[i].popularity < Friend[i+1].popularity)

    delete i th friend

    DeleteFriend=true

    break
if(DeleteFriend == false)

delete the last friend

Входные данные: Первая строка содержит число тестовых случаев. Первая строка каждого теста содержит N, количество друзей, которых Христос ie имеет в настоящее время, и K, количество друзей, которых Христос ie решает удалить. Следующие строки содержат популярность ее друзей, разделенных пробелом.

Вывод: Для каждого теста выведите NK-цифры, которые представляют популярность друга ie Христа после удаления K друзей.

ПРИМЕЧАНИЕ Порядок друзей после удаления необходимо сохранить ровно K друзей, как указано на входе.

ОБРАЗЕЦ ВХОДА:

3

3 1

3 100 1

5 2

19 12 3 4 17

5 3

23 45 11 77 18

ОБРАЗЕЦ ВЫХОДА

100 1

19 12 17

77 18

МОЕ РЕШЕНИЕ:

import collections as col

def delete(n, k, frnd):

    temp = []

    while k!=0:   

        for f in frnd:

            if f<f+1:

                del frnd[f]

                k -= 1

    temp.append(frnd)

print(" ".join(map(str, temp))) 

for i in range(int(input())):

  n, k = (map(int, input().split()))

  frnd = col.deque(list(map(int, input().split())))

  delete(n, k, frnd)

1 Ответ

0 голосов
/ 17 января 2020

Чтобы исправить ошибку, используйте замену for l oop на

for idx, f in enumerate(frnd):
    if f<f+1:
        del frnd[idx]
        break # <------

Вы получили ошибку, потому что вы использовали значение вместо индекса для удаления записи в deque

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...