我应该如何用runtim修复我的代码

2024-04-20 03:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

虽然我在HackerRank上为袜子商人写了一个代码,但我有一个错误。你知道吗

我试图可视化名为ar的数组的转换,但还没有找到导致错误的原因。你知道吗

代码:

#!/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)

Tags: 代码inimportifcount错误rangemath
2条回答

错误显示在以下行中:

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;
}

相关问题 更多 >