2017-07-09 17 views
-6

问题: 有一个整数数组。也有不相交的集合,每个都包含整数。你喜欢集合中的所有整数,并且不喜欢集合中的所有整数。你最初的幸福是。对于数组中的每个整数,如果添加到您的幸福中。如果,你增加了你的幸福。否则,你的快乐不会改变。输出你最后的快乐。黑客排名Python设置解决方案代码失败了一些测试用例

输入格式

第一行包含整数并以空格分隔。 第二行包含整数,数组的元素。 第三行和第四行分别包含整数和。

输出格式

输出一个整数,你的总幸福。

link to the question

这是我写

n, m = map(int, raw_input().split()) 

array1 = list(map(int,((raw_input()).strip().split()))) 

array = set(array1) 

setA = map(int,set((raw_input()).strip().split())) 

setB = map(int,set((raw_input()).strip().split())) 

Happiness=[] 

for i in array: 

    if i in setA: 
     Happiness.append(1) 
    if i in setB: 
     Happiness.append(-1) 
    else: 
     Happiness.append(0) 


finalHappiness = sum(Happiness) 

print (finalHappiness) 

据一些失败的测试案例,我已经尝试写很多不同的方式,但最终的结果是相同的代码。

虽然网上有非常简单的脚本答案,但我不明白我在写代码的逻辑中缺少什么。

可以请别人解释我做错了什么。

感谢

+0

格式化您的代码并在此处添加问题陈述 – PYA

+0

[问],并提供[mcve]。 –

+0

直接复制粘贴会让你的问题遗漏一些重要的句子/单词。在寻求帮助之前,请正确格式化您的问题。阅读@cᴏʟᴅsᴘᴇᴇᴅ提供的链接 – PYA

回答

0

您的超时问题实际上是由于在返回一个python2列表中map的意想不到的副作用。您创建一个组,将它传递给你的地图,然后返回一个列表,所以查找是O(n)

In [715]: x = set(['1', '2', '3']) 

In [718]: map(int, x) 
Out[718]: [1, 2, 3] 

这里是你如何在你的数据加载:

raw_input() # ignore n and m 
array = map(int, raw_input().split()) 
A = set(map(int, raw_input().split())) 
B = set(map(int, raw_input().split())) 

重要!不是转换成arr成集。你会失去重复,你的快乐值将是不正确的。

现在,您可以通过遍历arr中的每个元素并检查它是否属于set并相应地添加/子1来计算happiness的值。这是另一种列表解析技术。

happiness = sum(1 if x in A else (-1 if x in B else 0) for x in array) 

print(happiness) 

恭喜,你解决了这个难题!