hiho第三十六周
2016-07-02 15:17
330 查看
二分查找
1.利用STL的lower_bound
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int a[maxn];
int main()
{
int n, k;
scanf( "%d%d", &n, &k);
for ( int i = 0; i < n; i++){
scanf( "%d", &a[i]);
}
sort( a, a + n);
int * x = lower_bound( a, a + n, k);
if ( *x == k)
printf( "%d\n", x - a + 1);
else
printf( "-1\n");
return 0;
}
2.直接写二分
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int a[maxn];
int main()
{
int n, k;
scanf( "%d%d", &n, &k);
for ( int i = 0; i < n; i++)
scanf( "%d", &a[i]);
sort( a, a + n);
int x = 0, y = n - 1, mid;
while ( x <= y){
mid = ( x + y) / 2;
if ( a[mid] == k)
break;
else if ( a[mid] > k)
y = mid - 1;
else if ( a[mid] < k)
x = mid + 1;
}
if ( x <= y)
printf( "%d\n", mid + 1);
else
printf( "-1\n");
return 0;
}
1.利用STL的lower_bound
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int a[maxn];
int main()
{
int n, k;
scanf( "%d%d", &n, &k);
for ( int i = 0; i < n; i++){
scanf( "%d", &a[i]);
}
sort( a, a + n);
int * x = lower_bound( a, a + n, k);
if ( *x == k)
printf( "%d\n", x - a + 1);
else
printf( "-1\n");
return 0;
}
2.直接写二分
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int a[maxn];
int main()
{
int n, k;
scanf( "%d%d", &n, &k);
for ( int i = 0; i < n; i++)
scanf( "%d", &a[i]);
sort( a, a + n);
int x = 0, y = n - 1, mid;
while ( x <= y){
mid = ( x + y) / 2;
if ( a[mid] == k)
break;
else if ( a[mid] > k)
y = mid - 1;
else if ( a[mid] < k)
x = mid + 1;
}
if ( x <= y)
printf( "%d\n", mid + 1);
else
printf( "-1\n");
return 0;
}
相关文章推荐
- SpannableString与SpannableStringBuilder使用
- Android Button按钮点击两次之后,才执行点击事件的操作。
- C#序列化与反序列化(Serialize,Deserialize)实例详解
- Win7怎么看电脑内存?Win7系统查看电脑内存的三种方法
- hiho第十九周
- loadRunner12 设置关联 获取服务端动态数据
- 个人学习java的一些技巧!
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- 测试小卒子--python--Django 测试框架
- 机器学习 -- 决策树C45算法使用实例
- java中XML文档解析2(dom4j)和xpath的使用
- Delphi 2010 新增功能之: IOUtils 单元(6): TPath(结构体) 的方法与属性
- matlab图像剪裁命令imcrop()
- springbootboot-HttpServletRequest.getInputStream() 获取post内容
- 前端工程师须知pc电脑端分辨率
- Redis: OOM command not allowed when used memory > ‘maxmemory
- HDU 5305 DFS
- hiho第十四周
- 数组的全排列算法
- 机器学习 -- 决策树根节点的选择过程