[英]How should I fix my code for Sock Merchant with runtime error
盡管我在 HackerRank 上為 Sock Merchant 編寫了代碼,但我還是犯了一個錯誤。
我試圖可視化名為ar
的數組的轉換,但我還沒有找到導致錯誤list index out of range
的原因。
代碼:
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the sockMerchant function below.
def sockMerchant(n, ar):
num = 0
for i in range(len(ar)):
if ar.count(ar[i]) > 1:
if ar.count(ar[i]) % 2 == 0:
num += ar.count(ar[i]) // 2
print(num) #2
print(ar[i])
while ar[i] in ar:
ar.remove(ar[i])
#[20, 20, 30, 50, 20]
else:
num += math.ceil(ar.count(ar[i]) // 2)
print(num) #3
while ar[i] in ar:
ar.remove(ar[i])
#[30, 50]
else:
continue
return num #3
if __name__ == '__main__':
n = 9
ar =[10, 20, 20, 10, 10, 30, 50, 10, 20]
result = sockMerchant(n, ar)
print(result)
輸出:
Finished in N/A
2
10
IndexError: list index out of range
Line 18 in sockMerchant (Solution.py)
Line 36 in <module> (Solution.py)
錯誤似乎在以下幾行中:
while ar[i] in ar:
ar.remove(ar[i])
每次循環時,都會運行代碼ar[i]
。 如果ar
中沒有足夠的元素來創建ar[i]
,則會出現該錯誤。 由於您要從循環內的ar
刪除元素,我的猜測是ar
不再至少有i+1
元素。
我想你想要這個:
value_to_remove = ar[i]
while value_to_remove in ar:
ar.remove(value_to_remove)
因為這會將您要刪除的值(“10”,根據您的評論)保存到一個變量中,並刪除它的所有實例。
static int sockMerchant(int n, int ar[]) {
int num_pairs = 0;
if (ar.length == 0) {
return num_pairs;
}
Set < Integer > set = new HashSet();
for (int i = 0; i < ar.length; i++) {
if (!set.contains(ar[i])) {
set.add(ar[i]);
} else {
num_pairs++;
set.remove(ar[i]);
}
}
return num_pairs;
}
在 Python 中嘗試另一種方法來應對“Sock Merchant”挑戰。
在這里,我通過從“集合”庫中導入來使用計數器功能。
在將它排列成字典值后,我通過截斷它來計算超過 1 的對的數量......那是 n//2。
您可以使用此列表 # my_lst = [50, 20, 30, 90, 30, 20, 50, 20, 90] 或任何其他可能的列表。
from collections import Counter
def sock_merchant(my_lst):
a = dict(Counter(my_lst))
print(a)
pairs = []
for value in a.values():
if value > 1:
pairs.append(value//2)
return sum(pairs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.