**區間縮小-> 剩下兩個下標->判斷兩個下標**
1. 這兩個下標根據先要end還是先要start先後順序會有不同。
2.
如果沒有target出現,令start = mid, end = mid不會影響結果。你只要讓問題的規模縮小即可。因爲start和end不管是否包括mid值都不影響最後的結果
**注:不要把縮小區間和得到答案放在一個循環裏面,容易出問題,增加難度**
給定一個排序的整數數組(升序)和一個要查找的整數
target
,用O(logn)
的時間查找到target第一次出現的下標(從0開始),如果target不存在於數組中,返回-1
。樣例
在數組
[1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
這個題應該是Binary Search最基礎的題,直接套用模版就可以,以下是這個題的代碼(Bug Free):
int binarySearch(vector<int> &array, int target) { if (!array.size()) return -1; int start = 0, end = array.size() - 1; while (start < end) { int mid = (start + end) >> 1; if (array[mid] < target) { start = mid + 1; } else if (array[mid] > target) { end = mid -1; } else { end = mid; } } if (array[start] == target) return start; return -1; }
遞歸寫法:
1. 寫個helper
2. 把while循環相反的條件當成base case
3. 改座標變成了recursion函數裏面改座標