寫一個函數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");
}
}