您的位置:首页 > 理论基础 > 数据结构算法

457. 经典二分查找问题

2018-03-19 21:30 417 查看
在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1

您在真实的面试中是否遇到过这个题? 

Yes

样例

给出数组 
[1, 2, 2, 4, 5, 5]
.
对于 target = 
2
, 返回 1 或者 2.
对于 target = 
5
, 返回 4 或者 5.
对于 target = 
6
, 返回 -1.

挑战 

O(logn) 的时间

class Solution {
public:
/*
* @param nums: An integer array sorted in ascending order
* @param target: An integer
* @return: An integer
*/

int binarySearch(vector<int> &nums,int target,int first,int last){
while(first<last){
int mid=(first+last)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]>target)
return binarySearch(nums,target,first,mid-1);
else
return binarySearch(nums,target,mid+1,last);
}

return -1;

}
int findPosition(vector<int> &nums, int target) {
// write your code here
int first=0,last=nums.size()-1;
return binarySearch(nums,target,first,last);
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息