1240:查找最接近的元素 2020-12-27

简介: 1240:查找最接近的元素 2020-12-27

1240:查找最接近的元素

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

在一个非降序列中,查找与给定值最接近的元素。

【输入】

第一行包含一个整数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. #include <iostream>
2. #include <cstdio> 
3. #include <algorithm>
4. using namespace std;
5. int a[100005];
6. int n,m;
7. int mid_n(int x){
8.  int l=1,r=n;
9.  int midle;
10.   while(l!=r+1&&r<=n&&l>=1){
11.     midle=(l+r)/2;
12.     if(a[midle]==x){
13.       return x;
14.       break;
15.     }
16.     else if(a[midle]>x) r=midle-1;
17.     else l=midle+1;
18.   }
19.   if(r<1)return a[1];
20.   else if(l>n)return a[n];
21.   else return a[l]-x<x-a[r]?a[l]:a[r];
22. }
23. int main(int argc, char *argv[])
24. {
25.   int t;
26.   scanf("%d",&n);
27.   for(int i=1;i<=n;i++) scanf("%d",&a[i]);
28.   scanf("%d",&m);
29.   for(int i=1;i<=m;i++){
30.     scanf("%d",&t);
31.     printf("%d\n",mid_n(t));
32.   }
33.   return 0;
34. }

 

相关文章
|
2月前
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置
|
5月前
|
算法 测试技术 C++
C++二分算法:找到最接近目标值的函数值(一)
C++二分算法:找到最接近目标值的函数值
|
5月前
|
算法 C# C++
C++二分算法:找到最接近目标值的函数值(二)
C++二分算法:找到最接近目标值的函数值
|
7月前
|
算法
【算法专题突破】二分查找 - 在排序数组中查找元素的第一个和最后一个位置(17)
【算法专题突破】二分查找 - 在排序数组中查找元素的第一个和最后一个位置(17)
29 0
|
7月前
|
算法
【算法挨揍日记】day10——704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
331 0
|
10月前
|
算法 C语言 C++
【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置
二分查找是一种高效的查找算法,其时间复杂度为 O(log n)。在许多情况下,我们需要在一个有序数组中找到某个目标值的搜索范围。本文将介绍一种基于二分查找的搜索范围查找算法,该算法能够快速找到目标值在数组中的起始和结束位置。
48 0
|
10月前
重生之我是孔乙己——查找数组缺失元素的几种方法
重生之我是孔乙己——查找数组缺失元素的几种方法
46 0
|
11月前
|
算法
每日一题—— 在排序数组中查找元素的第一个和最后一个位置
每日一题—— 在排序数组中查找元素的第一个和最后一个位置
|
11月前
|
算法 前端开发 索引
前端算法-查找对应元素
前端算法-查找对应元素
|
11月前
|
算法 前端开发
前端算法-查找旋排序数组中最小值
前端算法-查找旋转排序数组中最小值