ホームページ  >  記事  >  バックエンド開発  >  Python アルゴリズム - 条件を満たす 2 つの数値をすばやく見つけます

Python アルゴリズム - 条件を満たす 2 つの数値をすばやく見つけます

高洛峰
高洛峰オリジナル
2016-10-18 10:38:232172ブラウズ

質問の前提は、このような数字が2つあるはずだということです

解決策は書きません...普通は考えられません

最初は、ハッシュテーブルを使用することを考えていました解決策 2 の終わり

(実際には、ターゲットの配列と同じ大きさのハッシュ テーブルを作成しようと考えました...存在する場合はインデックスに書き込みますが、すべてを検索したい場合は、2 つのハッシュ テーブルが必要です-次元配列。しかし、ターゲットが非常に大きい場合、スペースの無駄になると思いました...そこで、Dictに変更しました)

後で問題がわかりました。 2つの数値を要求するだけです - -

展開質問の方が面白いです

3 つを見つけるのは難しいことではありません。さらに追加したい場合は...

2. 辞書

def find_pair(A, target):
    B = [[] for i in range(target + 1)]
    for i in range(0, len(A)):
        if A[i] <= target:
            B[A[i]].append(i)
    for i in range(0, target / 2 + 1):
        if len(B[i]) != 0 and len(B[target - i]) != 0:
            print(i, B[i], target-i, B[target-i])
  
if __name__ == "__main__":
    A = [0, 1, 1, 2, 11, 8, 3, 4, 5, 6, 7, 8, 9, 10]
    find_pair(A, 9)

3このメソッドは並べ替えられています。ブック内のインデックスを返す意味がわかりません...私は怠け者なので、組み込みのものを使用しています...

def find_pair(A, target):
    B = {}
    for i in range(0, len(A)):
        if A[i] <= target:
            if not B.has_key(A[i]):
                B[A[i]] = [i]
            else:
                B[A[i]].append(i)
    for i in range(0, target / 2 + 1):
        if B.has_key(i) and B.has_key(target-i):
            print(i, B[i], target-i, B[target-i])
  
if __name__ == "__main__":
    A = [0, 1, 1, 2, 11, 8, 3, 4, 5, 6, 7, 8, 9, 10]
    find_pair(A, 9)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。