c++中的lower_bound和upper_bound

lower_bound是找到第一個大於等於val的值,沒有就返回end
uppder_bound是找到第一個大於val的值,沒有就返回end
前提:數組是有序的

用法

template<class ForwardIterator, class Type>
   ForwardIterator lower_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val
   );
template<class ForwardIterator, class Type, class BinaryPredicate>
   ForwardIterator lower_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val,
      BinaryPredicate _Comp
   );

參考代碼(二分法)

int lower_bound(vector<int> v,int begin,int end,int target){
	while(begin < end){
		int mid = begin + (end - begin) / 2;
		if(v[mid] < target){
			begin = mid + 1;
		}
		else{
			end = mid;
		}
	}
	return begin;
}

int upper_bound(vector<int> v,int begin,int end,int target){
	while(begin < end){
		int mid = begin + (end - begin) / 2;
		if(v[mid] <= target){
			begin = mid + 1;
		}
		else{
			end = mid;
		}
	}
	return begin;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章