【发布时间】: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将删除任意元素。这不能给你一个一致的结果。