算法之二分查找
来源:互联网 发布:linux hexdump函数 编辑:程序博客网 时间:2024/05/16 08:02
01:查找最接近的元素
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
在一个非降序列中,查找与给定值最接近的元素。
- 输入
- 第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
- 输出
- m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。
- 样例输入
32 5 82105- 样例输出
85
//二分查找函数版本1 /*写一个函数,在包含size个元素的,从小到大排序的int数组a中查找元素p,如果找到,返回元素下标,如果找不到,则返回-1,要求复杂O(log(n))*/ int BinarySearch(int a[],int size,int p){int L=0,R=size-1;while(l<=R){int mid=L+(R-L)/2;if(p==a[mid])return mid;else if(p<a[mid]){R=mid-1;}else if(p>a[mid]){L=mid+1;}}return -1;} //复杂度o(log(n)) //////////////////////////////////////二分查找函数版本2/*写一个函数LowerBound,在包含size个元素的,从小到大排序的int数组a里查找比给定整数p小的,下标最大的元素,找到返回其下标,找不到返回-1*/int LowerBound(int a[],int size,int p){//复杂度O(log(n)) int L=0,R=size-1;int lastPos=-1;//到目前为止找到的最优解 while(L<=R){//如果查找区间不为空就继续查找 int mid=L+(R-L)/2;if(p<=a[mid]){R=mid-1;}else{lastPos=mid;L=mid+1;}}return lastpos;}
#include <bits/stdc++.h>using namespace std;#define MAXN (100100) int num[MAXN];int main(){ int n; cin>>n; for(int i=1;i<=n;++i) cin>>num[i]; int m; cin>>m; while(m--){ int x,ans; cin>>x; int l=1,r=n,mid; if(x<=num[1]){ cout<<num[1]<<endl; continue; } if(x>=num[n]){ cout<<num[n]<<endl; continue; } while(l<=r){ mid=(l+r)>>1; if(num[mid]<=x){ l=mid+1; } else r=mid-1; }if(abs(num[l]-x)<abs(num[r]-x)) ans=l;else ans =r;cout<<num[ans]<<endl; }return 0;}
阅读全文
0 0
- 算法之二分查找
- 算法之二分查找
- 算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法之二分查找算法
- 算法之二分查找法
- 常见算法之二分查找
- 算法学习之二分查找
- python算法之二分查找
- C++算法之 二分查找
- 数据结构(Java)--数组和矩阵
- 窗口点击模拟
- MTK bootloader 启动过程
- NOIP2012普及组 T3 摆花(加强版)
- UDT源码剖析(二):UDT自带例程recvfile注释
- 算法之二分查找
- Spark架构原理
- Git使用学习笔记
- scala(4)-----变量
- Linear Regression WEEK2编程作业
- [LOJ#2289 && BZOJ5020][THUWC 2017]在美妙的数学王国中畅游
- Node 搭建简易 HTTP 静态资源服务器
- JavaScript中for循环总是输出最大值问题的几种解决方式
- 实现多层感知机