第五章 ALDS1_4_B Binary Search 二分搜索

来源:互联网 发布:mac 查看安装的程序 编辑:程序博客网 时间:2024/06/05 20:03

知识点

对于已经排序好的数列,我们可以使用二分搜索法更快速找到key。
初始:left = 0 , right = n,先通过key和位置mid = (left + right) / 2的元素比较,若key < A[mid] ,则设置right = mid;若key > A[mid],则设置left =mid +1;不断缩小范围重复上面的步骤直到key或者结束搜索。

问题链接

ALDS1_4_B Binary Search

问题内容

对于已经排序好的数列S,搜索包含q个不重复元素的T数列元素出现的总和。

思路

利用二分搜索的思想去做即可

代码

实现二分搜索

#include<iostream>#include<cstdio>using namespace std;// 二分搜索bool BinarySearch(int A[], int n, int key) {    int left = 0 , right = n, mid;    while (left < right) {        mid = (left + right) / 2;        if (key == A[mid])            return true;        if(key > A[mid])            left = mid + 1;        if (key < A[mid])            right = mid;    }    return false;}int main() {    int n, q, key;    int sum = 0;    int A[100000 + 10];    scanf("%d", &n);    for (int i = 0; i < n; i++)        scanf("%d", &A[i]);    scanf("%d", &q);    for (int i = 0; i < q; i++) {        scanf("%d", &key);        if (BinarySearch(A, n, key))            sum++;    }    printf("%d\n", sum);}

利用STL的binary_search

lower_bound(A, A+n,key):指向数列A中第一个不小于key的元素
upper_bound(A, A+n,key):指向数列A中第一个大于key的元素
binary_search(A,A+n,key):指向数列A中第一个不小于key的元素
binary_search内部实现运用了lower_bound

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main() {    int n, q, key;    int sum = 0;    int A[100000 + 10];    scanf("%d", &n);    for (int i = 0; i < n; i++)        scanf("%d", &A[i]);    scanf("%d", &q);    for (int i = 0; i < q; i++) {        scanf("%d", &key);        if (binary_search(A, A + n, key))            sum++;    }    printf("%d\n", sum);}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 徐枫年轻照片 徐梦 徐欣 徐氏千金 农门徐氏 徐氏 三国杀徐氏 徐氏图腾 徐氏起名 徐氏名字 徐氏姓名 徐氏湘菜 徐氏名人 徐氏家族24字辈分口诀 徐氏姓名大全 徐氏名字大全女孩名字 清末 徐氏纯情 徐氏宝宝取名 徐氏四个字的名字 徐氏翠缘翡翠是真的吗 徐氏宝宝起名 徐氏男孩名字大全 徐氏辈分排列 徐氏名字大全 徐氏起名大全男孩 徐氏千金 陌上无双 徐氏名字大全男孩 徐氏起名大全 农门徐氏 可可宝 中华徐氏始祖陵 徐水 徐水吧 徐水招聘 徐水招聘网 徐水信息网 徐水县 徐水区 徐水站 徐水房价 徐水古玩城 徐水刻章