704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
1. 非递归法
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0, right=nums.size()-1;
while (left <= right)
{
int mid = (right - left) / 2 + left;
if (nums[mid] == target) return mid;
else if (nums[mid] > target) right = mid-1;
else if (nums[mid] < target) left = mid+1;
}
return -1;
}
};
2. 递归法
class Solution {
public:
int serach_recur(vector<int> &nums, int target, int left,int right)
{
if (left > right) return -1;//未找到
int mid = ( right - left )/2 + left;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) return serach_recur(nums, target, mid+1, right);
else return serach_recur(nums, target, left, mid-1);
//如此才能保证不报错“non-void function does not return a value in all control paths.”
}
int search(vector<int>& nums, int target) {
return serach_recur(nums, target, 0, nums.size()-1);
}
};