递推递归练习 P 二分查找
来源:互联网 发布:阿里巴巴农村淘宝加盟 编辑:程序博客网 时间:2024/06/06 14:24
Description
给出含有n个数的升序序列,保证序列中的数两两不相等,这n个数编号从1 到n。
然后给出q次询问,每次询问给出一个数x,若x存在于此序列中,则输出其编号,否则输出-1。
Input
单组输入。首先输入一个整数n(1 <= n && n <= 3000000),接下的一行包含n个数。
再接下来的一行包含一个正整数q(1 <= q && q <= 10000),表示有q次询问。
再接下来的q行,每行包含一个正整数x。
Output
对于每次询问,输出一个整数代表答案。
Sample Input
51 3 5 7 93158
Sample Output
13-1
这道题很多人提交都超时了,因为我们学的是C++所以大家都用的cin cout 这个耗时比较多,换成scanf和printf就好了,至于二分查找,实现起来就不困难了,设置i=0 j=n-1 mid=(i+j)/2 若a[mid]>要查找的数
j=mid-1,小于就i=mid+1,如此实现;代码如下:
#include <bits/stdc++.h>using namespace std;int a[3000005],n;int find(int x){ int i,j,mid,y; i=0; j=n-1; mid=(i+j)/2; while(i<=j) { if(a[mid]==x) { y=mid+1; break; } else { if(a[mid]>x) j=mid-1; else i=mid+1; } mid=(i+j)/2; } if(i>j)y=-1; //数组中没有要查的数,返回-1; return y; }int main(){ int q,x,i,y; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&q); while(q>0) { scanf("%d",&x); y = find(x); printf("%d\n",y); q--; } return 0;}
0 0
- 递推递归练习 P 二分查找
- 递推递归练习P二分查找
- 递推递归专题 P 二分查找
- 递推递归练习P
- 递推递归练习 P
- 递推递归练习 P
- 递推递归练习 P
- 递推递归练习P
- ACM递归递推练习 Problem P
- 递推递归练习——P
- 递归递推之二分查找
- 递推递归练习 A
- 递推递归练习 B
- 递推递归练习 C
- 递推递归练习 E
- 递推递归练习 F
- 递推递归练习 G
- 递推递归练习 I
- VS2012 asp.net开发之“IIS配置网站”
- sql语句使用-插入列与连接查询
- 关系数据库
- 编程题:旋转数组的最小数字
- 【特征匹配】ORB原理与源码解析
- 递推递归练习 P 二分查找
- eclipse中格式化代码快捷键Ctrl+Shift+F失效的原因以及解决办法
- 什么是算法-数据结构学习笔记1.2(基本概念)
- 机器学习----神经网络(二)BP算法
- 在职研究生经济学报考条件
- 九宫格算法
- 剑指offer:面试4从尾到头打印链表
- 获取值栈中的数据
- vim下的一些设置