1.问题定义:
在有序数组中,查找在输入数组满足大于某值a,小于某值b的所有元素。其中a和b可以不在数组中。
2.举例描述:
输入数组eg:{2,7,8,11,16,26,31,33,37,40,45,49}。查找满足大于10小于30的所有数字,则输出的结果为{11,16,31}子集。若查找大于50或小于2则输出空集。
3.线性扫描方式:
复杂度O(n) 从左到右扫描满足条件的区间
4.二分查找方式:
复杂度O(logN)二分查找满足条件的区间,两次二分查找,确定子数组范围。
auto binary_search_left(const vector<int>& nums,int min,int max){
if(nums.empty())
return -1;
int left=0;
int right =nums.size()-1;
auto min_left=-1;
while(left<=right)
{
auto mid=(left+right)/2;
if(nums[mid]<min){
left=mid+1;
continue;
}