Я не могу отладить этот код, не уверен, какой логики мне не хватает

#python #arrays #algorithm #data-structures #hashmap

Вопрос:

Учитывая массив целых чисел arr четной длины n и целое число k.
Мы хотим разделить массив ровно на n/2 пары таким образом, чтобы сумма каждой пары делилась на k.
Верните True, если вы можете найти способ сделать это, или False в противном случае.

напр.

  1. arr = [1,2,3,4,5,10,6,7,8,9], k = 5, output: True
  2. arr = [-1,-1,-1,-1,2,2,-2,-2], k = 3, output: False

Код, который я написал:

 def canArrange(self, arr: List[int], k: int) -> bool:
    dictt = {}
    for i in range(len(arr)):
        arr[i] = arr[i] % k
        if arr[i] not in dictt:
            dictt[arr[i]] = 1
        else:
            dictt[arr[i]]  = 1
    count = 0
    for num in arr:
        if (k-num) == num:
            if dictt[num] > 1:
                dictt[num] -= 2
                count  = 1
            else:
                dictt[num] -= 1
        if (k-num) in dictt and dictt[(k-num)] != 0 and dictt[num] != 0:
            dictt[(k-num)] -= 1
            dictt[num] -= 1
            count  = 1
        elif num == 0 and dictt[num] > 1:
            dictt[num] -= 2
            count  = 1
    if count == len(arr)//2:
        return True
    else:
        return False
 

Моя логика: я в первую очередь беру граф «каждый элемент % K» и нахождение его другой паре и уменьшения граф и, чтобы избежать дубликатов, один особый случай-когда значения в паре же так за это я уже постепенно уменьшить значение в моем словаре и, наконец, я проверяю, является ли число пар равно половине элементов или-не
, я в состоянии пройти 93/97 тестов на leetcode, и не отладить, в остальном все как длина этих 4 тестовых случаев огромное, следовательно, не представляется возможным вручную, я должен отсутствовать некоторые моменты при установке моей логике, просьба помочь

Редактировать: ГОТОВО (я отредактировал код выше)

Комментарии:

1. Это помогло бы предоставить тестовый случай, который не работает — каковы входные данные, ожидаемые выходные данные и фактические выходные данные.

2. Почему бы вам не проследить за этим делом arr = [1, 1, 1, 1, 1, 1], k = 2 ? При проверке ваш алгоритм возвращается False , когда он должен вернуться True .

3. Кроме того, elif num == 0 особый случай кажется странным: почему нулевой элемент обрабатывается специально? Если вы полностью напишете, какой должна быть логика для второго цикла for (в словах), вы можете проверить, соответствует ли ваш код этой логике.

4. Это [1,1,1,1,1,1], k = 2 помогло мне отладить его, большое спасибо!