二分查找

Posted hualian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

描述

  给出一个有 n 个元素的数列 a 和两个整数 k 和 s,其中数列 a 的元素是按照升序排列的。

  请你在数列中找出一个元素 x,使得的 x+k=s。

输入

  输入第一行一个整数 n(1≤n≤10^5),表示数列中的元素个数。

  接下来一行输入 n 个空格隔开的整数,表示输入的数列 a,保证是升序排列,并且 −10^9≤ai≤10^9。

  接下来一行输入两个整数 k,s(−10^9≤k,s≤10^9)。

输出

  如果能找到满足条件的数,输出"Yes",否者输出"No"。

 输入样例 1

5
1 2 3 4 5
-1 4

输出样例1

Yes

解题思路

  这道题两个一减就算出了需要找的数,再用二分查找即可。

题解

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[100000+1];
 4 int x;
 5 void bsearch(int left,int right)//二分模板
 6 
 7     if(left<=right)
 8     
 9         int mid=(left+right)/2;
10         if (a[mid]==x) cout<<"Yes"<<endl;return; 
11         if (x<a[mid]) bsearch(left,mid-1);
12         else bsearch(mid+1,right);
13      
14     else cout<<"No"<<endl;
15     
16 int main()
17 
18  int n,k,s;
19      cin>>n;
20     for(int i=1;i<=n;i++)
21   
22    cin>>a[i];
23 
24    cin>>k>>s;
25    x=s-k;
26    bsearch(1,n);
27 

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

Task 04:数组二分查找

异序二分查找 二分查找方程根 二分查找重复元素最后一个

每周算法小知识之二分查找

二分查找总结

二分查找

java 二分查找法