すでにされた整数の配列を指定して、 昇順にソートし、二つの数字は、そのような彼らは、特定の目標数まで追加することを見つけます。
関数twoSumは、彼らがindex1のがINDEX2未満でなければならない目標、まで追加するように、2つの数のインデックスを返す必要があります。
注意:
- ご返却の回答(index1のとINDEX2の両方)はゼロベースではありません。
- あなたは、各入力が持っているであろうと仮定してもよい 、正確に 一つの解決策を、あなたが使用することはできません 同じ 二度の要素を。
例:
入力:番号= [2,7,11,15]、目標= 9
出力: [1,2]
説明: 2と7の合計は9である。したがってINDEX2 = 2、= 1をINDEX1。
二ポインタ部要件、アレイを横断するために使用される二つのポインタの定義を結合最初の思考サイクルの物理層、。主な問題は、サイクリング条件を設定することです。コードおよび関連する注意事項の具体的な内容は、詳細には説明しません。
1 クラスソリューション{ 2 公共: 3ベクトル< INT > twoSum(ベクトル< INT >&番号、int型のターゲット){ 4 INT * index1の、=&番号[ 0 ]; // 二つのポインタが同じ配列を指す定義する 。5 INT * INDEX2 =数字&[ 0 ]; 6 INTカウンタ= 0 ; // 配列の添字を記録する 7。 一方、(2 * index1の[カウンタ] <=ターゲット){ // 基準としてINDEX1するサイクリング条件を継続するために必要なブラケットない達していません 8 のための(int型+ = Iカウンタ1 ; Iはnumbers.sizeを<(); Iは++)// index1のを見つけるために次のトラバーサル、 9。 { 10 IF [I] ==ターゲット(index1の、[カウンタ] INDEX2 +){ // 検索条件値が返されますポインタを処理し; 11 index1の、= NULL; 12である INDEX2 = NULL; 13は リターン {カウンタ1 + 1、I +は1である。}; 14 } 15 他 IF(index1の、[カウンタ] + INDEX2 [I]>ターゲット)BREAK ; // そうでない場合は、後方モバイルを探し続け 16 } 。17 カウンタ++、 18である } 19。 index1の、= NULL; 20は = INDEX2 NULL; 21は、 リターン {}; // 見つからない、空返します。 22 } 23 }。