704. 二分查找
Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
具体题目链接: 题目链接
思路:
二分查找的最原始问题
分析:
1.思路:二分题目的思路:
确定二分边界(重点!!)
编写二分的代码框架(2个模版之一)
设计一个check(性质)
判断一下区间如何更新
如果更新方式写的是l=mid,r=mid-1,那么就在算mid的时候加上1
每次比较的是中点(用于缩小范围mid)与临界点(目标值target)(判断是哪一侧区间) 注意:每一次的check比较的都是mid与临界点target的大小,即mid ? target
如果mid>target说明target在mid的左边,r=mid
如果mid<target说明target在mid的右边,l=mid
代码:
版本一
var search = function(nums, target) {
if(!nums)return -1;
let left = 0;
let right = nums.length - 1;
while(left < right) {
let mid = left + right >>1;
if(nums[mid]>=target) {
right = mid;
} else {
left = mid+1;
}
}
if(nums[left]==target) return left;//如果找到目标值,返回left
return -1;//没找到目标返回-1;
};
版本二
var search = function(nums, target) {
if(!nums)return -1;
let left = 0;
let right = nums.length - 1;
while(left < right) {
let mid = left + right >>1;
if(nums[mid]>=target) {
right = mid;
} else if(nums[mid]==target) {
return mid;
} else {
left = mid+1;
}
}
if(nums[left]==target) return left;//如果找到目标值,返回left
return -1;//没找到目标返回-1;
};
总结:
这是算法系类文章「二分专题」的相关题解