私はcoderfightsから小さな問題に取り組んでいます: Pythonのアレイeffiency
注:配列は[1,1,1,2,3-]それが重複しているので、そのまたFalseの場合。
私のプログラムは完全に動作していますが、5,000個のエントリを持つテストアレイ上では、4秒間のウィンドウに収まらないので終了します。
私のコード:私は何
def almostIncreasingSequence(s):
l = len(s);
R1 = [] #RESULT AFTER 1st test
R2 = [] #RESULT AFTER 2nd test
T2 = [] #All true, to remove false positives
#TEST ONE 1 BY 1
for n in range(0,l):
one = s[:];
one.pop(n)
k = one[:];
if sorted(k)==k:
R1.append("T")
T2.append(k)
#else:
R1.append("F")
#TEST 2, REMOVE FALSE POSITIVE DUPLICATES
if "T" in R1:
# print("will go throught",T2)
secondTEST = len(T2)
for n in range(0,secondTEST):
#print("Running False Positive test for array # ",n)
duplicates = []
duplicates = T2[n]
if (len(duplicates) != len(set(duplicates))):
# print("DUPLICATE FOUND IN",T2[n])
#if found add F to R2
R2.append("F")
else:
# print("no duplicate found in, so TRUE ",T2[n])
R2.append("T")
#tf.append("F")
if "T" in R2:
return True
else:
return False
は次のとおりです。すべての場合に、その真の場合 最初のループでは、チェックを1つの要素を削除しました。 Trueの場合、2番目のテストを実行するために配列を保存します。ループが終了すると、Trueとして渡された配列がある場合、2番目のテストで重複数があるかどうかを調べて誤検出を排除します。彼らはその偽陽性を行う場合、その真でない場合。
最後に、Tが含まれている場合、[T、F、F]などの2番目のテストの後に配列を取得します。
私のアプローチでパフォーマンスを改善するにはどうすればよいですか?私はfalseにすると配列に "F"を書き込まないようにしましたが、それでも4秒未満で5.000配列を渡すためにパフォーマンスが向上しません。
'[1,1,2,3]'がFalseと評価される理由を説明できますか? 1のうちの1つを削除すると、厳密に注文されます。 – rolika
今編集しましたが、私は余分な1の配列を見逃しました。気づいてくれてありがとう! – Powisss