给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
来源:力扣(LeetCode)
class Solution {
public:
int search(vector<int> &nums, int target) {
int R= nums.size()-1;
int L = 0;
while(L<=R){//此时搜索区间为闭区间
int mid = (L+R)/2;
if(target==nums[mid])
return mid;
else if(target>nums[mid])
L= mid+1;
else if(target<nums[mid])
R=mid-1;
}
return -1;
}
};
二分查找时,一般涉及到两种区间,一种是左闭右闭[L,R],一种是左闭右开[L,R)
左闭右闭[L,R]:
此时的判断条件为L<=R,每次搜索的区间都是[L,R]
初始化R的值为nums.size()-1,while(L<=R)的终止条件为 L>R,即L==R+1
写成区间形式就是[R+1,R],此时区间为空
左闭右开[L,R):
此时的判断条件为L<R,每次搜索的区间都是[L,R)
初始化R的值为nums.size(),while(L<R)的终止条件为L==R
写成区间形式就是[R,R),此时区间为空