最近元素查找
2017-12-19 18:39
267 查看
在一个非降序列中,查找与给定值最接近的元素。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
输入
第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
输出
m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。样例输入
3 2 5 8 2 10 5
样例输出
8 5
数据范围限制
1 <= n <= 100000。//本题采用折半查找的方法,主要判断折半查找的终止条件 #include<isotream> #include<algorithm> using namespace std; int a[100001],b[100001];// 保证数据足够大 int search(int low,int high,int num){ //num表示要查找的数,low表示比num小的数的位置 ,high则与low相对 if(high-low<=1) //当high与low位置之间没有其他的数时,终止 return a[high]-num>=num-a[low]?a[low]:a[high]; // 返回差值最小的 int mid=(low+high)/2; if(num>a[mid]) return search(mid,high,num); else return search(low,mid,num); } int main(){ int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); //将输入数按从小到大的顺序排列 int m; cin>>m; for(int j=0;j<m;j++) cin>>b[j]; //输入要查找的数 for(int i=0;i<m;i++) cout<<search(0,n-1,b[i])<<endl; return 0; }
相关文章推荐
- js中查找最近的共有祖先元素的实现代码
- POJ4134查找最近的元素
- 查找最近元素
- 查找最近的共有祖先元素
- 二分查找离左边元素最近的(可以等于)
- IT公司100题-5-查找最小的k个元素
- [LeetCode] 162. Find Peak Element 查找峰值元素
- 程序员面试金典(排序与查找):元素查找(java解法)
- 比较两个List元素是否相同,查找出两个list的不同元素
- c#数组查找元素
- 76 binary_search 查找重复元素
- 二分法查找元素的位置
- c++ tinyxml查找utf8 xml元素并读取
- HDU 2025 - 查找最大元素
- C#通过KD树进行距离最近点的查找
- HDOJ 2025 查找最大元素 查找最大字母
- 元素查找(codevs 1230)
- 杨氏矩阵中查找元素
- 线性时间查找固定频率的元素