top1编程
← 返回题目
题解

【入门】二分查找满足条件的数

2 条题解

  • 0
    @ 2026-7-29 20:22:10
    #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
      @ 2026-7-28 22:10:01
      #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