提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
描述
给定一个排序的整数数组(升序)和一个要查找的整数target
,用O(logn)
的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1
。
样例
在数组 [1, 2, 3, 3, 4, 5, 10]
中二分查找3
,返回2
。
挑战
如果数组中的整数个数超过了2^32,你的算法是否会出错?
解题思路
主要是根据二分查找的思路,如果没有查找到,那么将会返回-1的位置
实现代码
class Solution {
public:
/**
* @param nums: The integer array.
* @param target: Target to find.
* @return: The first position of target. Position starts from 0.
*/
int binarySearch(vector<int> &nums, int target) {
// write your code here
if(nums.size()==0) return -1;
int low=0;
int high=nums.size()-1;
while(low<=high)
{
int mid=(low+high)/2;
if(nums[mid]==target)
{
if(mid==0) return mid;
if(nums[mid]>nums[mid-1]) return mid;
else
{
high=mid-1;
}
continue;
}
if(nums[mid]>target)
{
high=mid-1;
}
else if(nums[mid]<target)
{
low=mid+1;
}
}
return -1;
}
};