本文主要是介绍1.11 查找最接近的元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
01:查找最接近的元素
描述
在一个非降序列中,查找与给定值最接近的元素。
输入
第一行包含一个整数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
代码
#include <iostream>
#include <cstdio>
using namespace std;int a[10000010];int binary_screach(int l, int r, int key)
{int mid;while(l <= r){mid = (l + r) / 2;if(a[mid] > key){r = mid - 1;}else{l = mid + 1;}}return r;
}int main(void)
{int n;cin >> n;for(int i = 1; i <= n; i ++){cin >> a[i];}int m;cin >> m;for(int i = 1; i <= m; i ++){int x;cin >> x;if(x <= a[1]){cout << a[1] << endl;}else if(x >= a[n]){cout << a[n] << endl;}else{int k = binary_screach(1, n, x);if(a[k + 1] - x >= x - a[k]){cout << a[k] << endl;}else{cout << a[k + 1] << endl;}}}return 0;
}
这篇关于1.11 查找最接近的元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!