二分法求最小值的最大下標

寫一個函數LowerBound,在包含n個元素的int數組a裏查找比給定整數p小的,下標最大的元素。找到則返回起下標,找不到則返回-1

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
	return a<b;
}
int LowerBound(int a[],int n,int p){
	int l=0;
	int h=n-1;
	int x=-1;
	while(l<=h){
		int mid=l+(h-l)/2;
		if(a[mid]>=p){
			h=mid-1;// 太大了,變小一點 
		}else{
			x=mid;//保存目前最符合的值 
			l=mid+1;//試試更大的行不行 
		}
	}
	return x;
}
int main(){
	int n,p,i;
	int t;
	scanf("%d %d",&n,&p);
	int a[n];
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	sort(a,a+n,cmp);
	t=LowerBound(a,n,p);
	if(t!=-1){
		printf("%d",t);
	}else{
		printf("NO");
	}
	
}

 

發佈了72 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章