写一个函数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");
}
}