📟作者主页:慢热的陕西人
🌴专栏链接:力扣刷题日记
📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言
牛客热题:二分查找
题目链接
二分查找-I_牛客题霸_牛客网 (nowcoder.com)
思路
-
二分查找
-
两个指针l, r。首先l, r分别指向数组的两端
-
计算l,r的中点mid,查看
nums[mid]
和target的关系若:
nums[mid] == target: return mid;
nums[mid] < target: l = mid + 1;
else r = mid;
代码
int search(vector<int>& nums, int target)
{
int l = 0, r = nums.size() - 1;
if(r == -1) return -1;
while(l < r)
{
int mid = (l + r) >> 1;
if(nums[mid] == target) return mid;
else if(nums[mid] < target) l = mid + 1;
else r = mid;
}
return nums[l] == target ? l : -1;
}
复杂度
时间复杂度:O( l o g N logN logN),每次将搜索范围除以2
空间复杂度:O(1), 使用了常数个额外的变量