#python #arrays #algorithm #data-structures #hashmap
Вопрос:
Учитывая массив целых чисел arr четной длины n и целое число k.
Мы хотим разделить массив ровно на n/2 пары таким образом, чтобы сумма каждой пары делилась на k.
Верните True, если вы можете найти способ сделать это, или False в противном случае.
напр.
arr = [1,2,3,4,5,10,6,7,8,9], k = 5, output: True
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 помогло мне отладить его, большое спасибо!