A:問題解決のためのアイデア
この質問は、元の二分探索問題、比較的短い答えです。コードを書くときには、ライン上のいくつかの詳細に注意を払う必要があります。
2:完全なコード例(C ++版、Java版)
C ++:
クラスのソリューション { パブリック: int型検索(ベクトル< int型 > NUMS&、int型ターゲット) { int型 RET = - 。1 ; int型開始= 0 ; int型エンド= nums.size() - 1。 、 しばらく(開始<=エンド)// これがあることに注意してください。<= { INT MID =は+(終了-開始)開始/ 2 ; //は、さらに効率を改善するために、それが/であってもよいと>> IF(NUMS [MID]> ターゲット) { 終了=半ば- 1 。 } そう であれば(<NUMS [中間] 目標) { 始める =ミッド+ 1 。 } 他 { RET = ミッド。 休憩; } } 戻りRET。 } }。
Javaの:
クラスソリューション { 公共 int型の検索(INT [] NUMS、INT ターゲット) { int型 RET = - 1 。 INT =始める0端= nums.length-、1 。 一方(= <開始端) { int型のミッド= +始める((エンド開始)>> 1 )。 もし(NUMS [中間]> ターゲット) { 端 =半ば1 。 } そう であれば(NUMS [中間] < ターゲット) { 開始 =ミッド+ 1 ; } 他 { RET = ミッド。 休憩; } } 戻りRET。 } }