2017-07-09 5 views
-6

問題: 整数の配列があります。互いに素な集合もあり、それぞれには整数が含まれています。すべての整数が好きで、すべての整数が嫌いです。あなたの最初の幸せです。配列の各整数については、あなたが幸せに追加する場合。もしあなたがあなたの幸せに加わるならば、それ以外の場合、あなたの幸せは変わりません。最後にあなたの最終的な幸福を出力します。ハッカーのランクPythonがいくつかのテストケースで失敗したソリューションコードを設定します

入力フォーマット

最初の行は整数を含む、スペースで区切られています。 2行目には、配列の要素である整数が含まれています。 3行目と4行目にはそれぞれ整数が含まれています。

出力形式

合計幸福を出力します。

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

[ask]、[mcve]を提供してください。 –

+0

コピーを直接貼り付けると、あなたの質問がいくつかの重要な文章/言葉を見逃してしまいます。助けを求める前に、質問のフォーマットを正しくしてください。 @cᴏʟᴅsprovidedによって提供されたリンクを読む – 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())) 

重要! Do 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) 

おめでとう、あなたはこのような課題を解決!

関連する問題