二分查找
在一个有序无重复元素的数组nums
中,寻找一个target,如果找到了就返回对应的下标,如果没有找到就返回-1.
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;//定义target在在左闭右闭的区间,即[left,right]
while (left <= right) { //当 left == right 时,[left,right]区间依然有效,所以使用<=
int middle = left + ((right - left) >> 1);//防止溢出,等同于(left + right)/2
if (nums[middle] > target) {
right = middle - 1;//target在左区间[left,middle-1]
}
else if (nums[middle] < target) {
left = middle + 1;//target在右区间[middle+1,right]
}
else {
return middle;//在数组中找到目标值,就返回下标
}
}
return -1;//未找到目标值
}
};
int main() {
Solution Q;
int i;
vector<int> a(10);
for (i = 0; i < 10; i++) {
cin >> a[i];
}
int target;
cin >> target;
cout<<Q.search(a,target);
}