题解
【入门】二分查找满足条件的数
2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int a[100005]; int main() { int n,q,x; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>q; while(q--){ cin>>x; int l=1,r=n,mid; while(l<=r){ mid=(l+r)/2; if(x<=a[mid]){//加等号让一样的数一直往左 r=mid-1;//向左边更新右边界 }else{ l=mid+1; } } if(a[l]>=x){//找到最左边的数 cout<<l<<" "; }else{ cout<<-1<<" "; } } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int n,q,x; int a[100010]; int main(){ cin>>n; for(int i=1; i<=n;i++){ cin>>a[i]; } cin>>q; for(int i=1;i<=q;i++){ cin>>x; int l=1, r=n, mid; while(l<=r){ mid =l+(r-l)/2; //目标值小于等于查找值 那就找左半边 更新右边界 if(x<=a[mid]) { r=mid-1; } else { l=mid+1; //否则找右半边 更新左边界 } } if(a[l]>=x){ cout<<l<<" ";//注意输出格式 要加空格 } else{ cout<<-1<<" ";//这里也是 } } return 0; }
- 1