1. 程式人生 > >LintCode 14. 二分查找

LintCode 14. 二分查找

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. 二分查找