1、初始化:找到数组的最小值和最大值 int low=a[0],high=a[n-1]; 2、找中间值: int mid=(low+high)/2; 3、比较: mid是否满足条件 满足,去掉一半 不满足,去掉一半 4、循环2-3步,直到剩下最后一个 5、如果找到了,输出答案,否则输出-1 int main(){ int n,a[100050]={},m,b,ans; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>m; while(m--){ cin>>b; //最小值a[1] 最大值a[n] int l=1,r=n; //在1~n中,找最大的a[x],使得a[x]<b while(l<r){ int x=(l+r+1)/2;//加1避免死循环 if(a[x]<b) l=x;// else r=x-1; } if(b-a[l]<=a[l+1]-b) cout<<a[l]<<endl; else cout<<a[l+1]<<endl; } } (责任编辑:admin) |