LintCode 14. 二分查找
阿新 • • 發佈:2018-01-27
ger all int num aps () d+ 是否 一個 題目:給定一個排序的整數數組(升序)和一個要查找的整數
樣例
題目:給定一個排序的整數數組(升序)和一個要查找的整數target
,用O(logn)
的時間查找到target第一次出現的下標(從0開始),如果target不存在於數組中,返回-1
。
樣例
在數組 [1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
如果數組中的整數個數超過了2^32,你的算法是否會出錯?
解:標準的二分查找
註意,最後一個else即找到target,但是target的值在數組中有多個,應返回下標最小的一個(else裏的while實現這一效果)。
class Solution { public: /** * @param nums: The integer array. * @param target: Target number to find. * @return: The first position of target. Position starts from 0.*/ int binarySearch(vector<int> &array, int target) { // write your code here int hi=array.size(); int mid,low; low=0,mid=(hi+low)/2; while(low<=hi) { if(target>array[mid]) { low=mid+1; }else if(target<array[mid]) { hi=mid-1; }else { while(mid-1>=0&&array[mid-1]==array[mid]) { mid=mid-1; } return mid; } mid=(hi+low)/2; } return -1; } };
LintCode 14. 二分查找