問題の0.5概要
ソートされた配列とターゲットを考えると、配列内のオブジェクトを検索し、そのインデックスを返します。標的がアレイに存在しない場合、それが配列に挿入された位置に戻されます。
あなたは、アレイ内のことは、重複要素をとることができます。
例1:
例2:
例3:
例4:
1.分析
データ検索時の暴力leetcodeが二分法よりも短くなっている理由は、典型的なバイナリ検索は、しかし分かりません。
しかし、最初に私はそれがちょっとも醜いそれを書きました!
シンプルなコードのみJiangong李ああ。
2.コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
クラスのソリューション{ パブリック: int型searchInsert(ベクトル<整数>&NUMS、int型のターゲット){ int型I、ミッド; INT低= 0、ハイ= nums.size() - 1; IF(ターゲット> NUMS [高]){ リターンハイ+ 1。 } (目標<NUMS [低])であれば{ 0を返します。 } IF(ターゲット== NUMS [低]){ 戻り低いです。 } < 大专栏。leetcode笔记--35搜索插入位置- CrowFea BR /> 一方(高-低> 1){ IF(ターゲット== NUMS [低]){ 戻り低いです。 } IF(ターゲット== NUMS [高]){ 戻り高いです。 }
半ば=(ハイロー+)/ 2。 IF(NUMS [中間] ==ターゲット){ 戻りミッド。 } そうであれば(NUMS [中間] <ターゲット){ 低い=ミッド。 } 他{ 高=ミッド。 } } もし(NUMS [中間] <ターゲット){ 戻り中間+ 1。 } 他{ 戻りミッド。 } } }。
|
あまりにも!醜いです!アップ!
裁判官より確実に速いが、醜いものの。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
class Solution { public: int searchInsert(vector<int>& nums, int target) { int i,mid; int low=0,high=nums.size()-1; while (low <= high ){ mid = (low + high )/2; if (nums[mid] < target) low = mid + 1; else if ( nums[mid] > target) high = mid - 1; else return mid; } if(nums[mid]<target){ return mid+1; } return mid; } };
|
几个要点:
- low<=high
- low=mid+1
- high=mid-1
- return mid