二分查找的边界问题
关于二分查找的边界问题
二分查找首先要满足单调性,对于这种方式,l==r,l是第一个大于差找位置的位置,举例,
在1 2 3 4 5中查找3,l==r==4,根据需要输出l或l-1.
//二分查找 #include<bits/stdc++.h> using namespace std; int a[5616545]; int n; int find(int x) { int l=1,r=n,mid; while(l<r) { mid=(l+r)>>1; if(a[l]>x) r=mid; else l=mid+1; } return l-1; } int main() { int x; cin>>n>>x; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); cout<<find(x); return 0; }