【问题标题】:HackerRank won't accept my code for the Set .discard(), .remove() & .pop() challengeHackerRank 不会接受我的 Set .discard(), .remove() & .pop() 挑战代码
【发布时间】:2023-02-25 04:21:42
【问题描述】:

这是提示: 你有一个非空集合 s,你必须执行 N 行中给出的 N 个命令。 命令将是 pop、remove 和 discard。

输入格式:

  • 第一行包含整数 n,集合 s 中的元素数。
  • 第二行包含集合 s 的 n 个空格分隔的元素。所有元素都是非负整数,小于或等于 9。
  • 第三行包含整数 N,命令数。
  • 接下来的 N 行包含 pop、remove 和/或 discard 命令及其相关值。

问题:HackerRank 中的输出与外部 IDE 中的输出不同。

我的解决方案:

input()
s = set(map(int, input().split()))
num_commands = int(input())
command = ["", ""]
for i in range(num_commands):
    command = input().split()
    if len(command) == 1:
        getattr(s, command[0])()
    elif len(command) == 2:
        command[1] = int(command[1])
        if command[1] in s:
            getattr(s, command[0])(command[1])
print(sum(s))

测试输入:

9
1 2 3 4 5 6 7 8 9
10
pop
remove 9
discard 9
discard 8
remove 7
pop
discard 6
remove 5
pop
discard 5

问题: 它说我的输出是 6,预期输出是 4。当我在我的 IDE 中测试代码时,输​​出是 4。我可以查找不同的解决方案,但通常它对我了解哪里出错更有帮助,因为显然我的理解存在差距。 ChatGPT 也不知道该怎么办。出了什么问题?万分感谢!

【问题讨论】:

  • 这些命令中的每一个应该做什么?
  • Python 集没有顺序,因此 pop() 删除了一个随机元素。如果使用它,我看不出如何期望得到一致的结果。
  • remove()discard() 之间的唯一区别是它是否引发未找到元素的异常,但您的代码会检查该元素是否在集合中。如果你让两个不同的命令做同样的事情,那有什么意义呢?
  • 为了清楚问题,您可以在此处包含问题的链接吗?
  • 只需阅读黑客等级上对该问题的讨论。你的理解没有错。 pop 将删除任意元素。这不能给你一个一致的结果。

标签: python set


【解决方案1】:

没有办法确定地预测哪个元素将被删除,最终的总和取决于 python 实现:

pypy3 选择移除最后一个元素

python3选择去掉第一个元素

对于测试用例,正确的解决方案将使用 python 输出 4,使用 pypy 输出 6

反转集合以符合 python 的 pop() 实现:

input()
s  = list(map(int, input().split()))
s.reverse()
s = set(s)
num_commands = int(input())
command = ["", ""]
for i in range(num_commands):
    command = input().split()
    if len(command) == 1:
        getattr(s, command[0])()
    elif len(command) == 2:
        command[1] = int(command[1])
        if command[1] in s:
            getattr(s, command[0])(command[1])
print(sum(s))

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2017-03-22
    • 2018-01-21
    • 1970-01-01
    • 2022-07-24
    • 2022-07-12
    相关资源
    最近更新 更多