ネットワークオフ牛 - と二つの数S

タイトル説明

インクリメント入力とデジタルソートされた配列のSは、アレイ内の2つの数値を見つけ、それらが正確であることS、および複数桁の数字は、S、両者の最小数の出力の積に等しい場合。

出力説明:

各テストケースに対応する、2つの数の出力、第1の小出力。

解像度コード:彼らは少し面倒をしたいと複雑なルールが小さく遠く離れた2つの数の積、そこにあります。
- * -コーディング:UTF-8 - * - 、シーケンス増加
#を2つの数値を見つけるために、との値に
#のアイデア:バイナリ検索(および値に最も近い数を見つける)、検索を絞り込むために一歩一歩。
クラスソリューション:
     DEF FindNumbersWithSum(セルフ、アレイ、TSUM):
        壁紙はここに書くコード 
        。左1 =  = LEN(アレイ)-1 
        結果 = []
        マルチ =フロート(' INF ' 
        最後 = 0
         ため NUM 配列:
             場合は左> 右:
                 続ける
            インデックス = self.byteFind(アレイ、左、右、tsum- NUM)
             場合 NUM +配列[インデックス] == TSUM  NUM *配列[インデックス] < マルチ。
                    マルチ = NUM * 配列[インデックス]
                    result.append([NUM、配列[インデックス]) + = 1つの = インデックス
         のリターン結果[-1] 場合(結果)でlen = 0!他に[]
     デフbyteFind(自己、配列、左、右、ターゲット):
         場合は左> 右:
             リターン・
        半ば =(左+右)// 2
         であれば、配列[中間]> ターゲット:
             戻り self.byteFind(アレイ、左、中1 、ターゲット)
         ELIF配列[中間] < 目標:
             戻り self.byteFind(アレイ、ミッド+ 1 、右、ターゲット)
         リターン・ミッド

高度:

満足列数をインクリメントし、テールポインタiとjには2つの2つのヘッドを提供 
AI + AJ ==合計した場合、答えは(製品間の小さな違いが離れて)です 
= 1 - AI + AJ>合計した場合、AJは確かに1つの答え(数は以前に取得した以前の私は不可能であった)、Jではありません 
AIは+ AJ <合計は、1を愛した場合、確かに答えない(以前に引き戻されて番号jが不可能である)、I + = 1 
O(N)
クラスソリューション:
    デフFindNumbersWithSum(自己、配列、TSUM):
        ここで#ライト・コード
        左、右= 0、lenの(配列)-1-
        しばらく(左<右):
            もしアレイ[左] +配列[右] <TSUM。
                左+ = 1
            elifの配列[左] +配列[右]> TSUM:
                右 -  = 1
            そうしないと:
                リターン[配列[左]、配列[右]]
        リターン[]

おすすめ

転載: www.cnblogs.com/ditingz/p/12149093.html