タイトル説明
インクリメント入力とデジタルソートされた配列の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 そうしないと: リターン[配列[左]、配列[右]] リターン[]