描述
请实现无重复数字的升序数组的二分查找
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1
数据范围:0≤len(nums)≤2×1050≤len(nums)≤2×105 , 数组中任意值满足 ∣val∣≤109∣val∣≤109
进阶:时间复杂度 O(logn)O(logn) ,空间复杂度 O(1)O(1)
class Solution {
public:
int search(vector<int>& nums, int target) {
// write code here
int begin=0;
int end=nums.size()-1;//注意这里的减1
while(end>=begin)
{
int mun=(end+begin)/2;//取整 [0,1,2]结果取1 [0,1,2,3]结果也取1
if(target==nums[mun])
return mun;
else if(target>nums[mun])
begin=mun+1;
else
end=mun-1;
}
return -1;
}
};
总结:这里面有很多细节,比如二分是(begin+end)/2,缩区间的时候是begin+1,end-1,还有end的初始下标是size()-1,都是细节,思想不难,但注意细节。