美文网首页
2018-12-04 - 你真的会二分搜索吗?

2018-12-04 - 你真的会二分搜索吗?

作者: DejavuMoments | 来源:发表于2018-12-04 18:22 被阅读6次

问题:请编写一个程序,输入包含 n 个整数的数列 S 以及包含 q 个不重复整数的数列 T,输出即包含于 T 也包含于 S 的整数的个数 C。
输入:第一行输入 n,第二行输入代表 S 的 n 个整数,第三行输入 q,第四行输入代表 T 的 q 个整数。
输出:用一行输出 C。
限制S 的元素按照升序排列n \le 100000, q \le 50000, 0\leS的元素 \le 50000, 0\leT的元素 \le 50000, 且 T 的元素不重复。
输入示例

5
1 2 3 4 5
3
3 4 1

输出示例

3

解题思路:通过搜索数列 S 中是否包含 T 的各个元素。由于限制条件 “S 的元素按照升序排列”,可以采用二分搜索来解题。

一个可能“正确”的 Solution

#include<stdio.h>

int A[1000000], n;

int binary_search(int key){
    int left = 0, right = n, mid;
    while(left < right){
        mid = (left + right) / 2;
        
        // 发现 key
        if(key == A[mid]) return 1;

        // 搜索后半部分
        if(key > A[mid]){
            left = mid + 1;
        }
        // 搜索前半部分
        else if(key < A[mid]){
            right = mid;
        }
    }
    return 0;
}

int main(int argc, char const *argv[])
{

    int q, k, sum = 0;

    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", &k);
        if(binary_search(k)) sum++;
    }

    printf("%d\n", sum);
    
    return 0;
}

仔细看看这行代码,由于 low 和 high 都是整型,当它们的值非常大的时候,low+high 就有可能会溢出,其结果变为一个负数。

mid = (left + right) / 2;

解决方案如下:

mid = left + (right - left) / 2;

相关文章

  • 2018-12-04 - 你真的会二分搜索吗?

    问题:请编写一个程序,输入包含 n 个整数的数列 S 以及包含 q 个不重复整数的数列 T,输出即包含于 T 也包...

  • 10个搜索技巧,快速找到你想要的资源

    参考知乎的广告语为例,想问大伙三个问题。 你真的会搜索吗? 你真的会搜索吗? 你真的会搜索吗? 虽然是三句重复的问...

  • 【你真的会搜索吗?】

    【你真的会搜索吗?】 先问大家几个问题,看看你是不是会一筹莫展: 你想看系列美剧,主流视频网站都没有,怎么办? 你...

  • 你真的会搜索吗???

    日常网络中搜索引擎是我们用的最多的工具,它可以帮助我们找到特定的信息,但同时也会找到大量的无关信息,让我们陷入大海...

  • 你真的会搜索吗?

    点开百度,却没有搜到想要的结果,或者搜到了,花费时间很长,对于这些情况,是不是很熟悉? 你真的会搜索吗? 今天看了...

  • 你真的会搜索吗?

    这是一篇方法论。 相信很多人看到标题都觉得可笑,搜索谁不会呀,打开浏览器,在搜索框输入问题,点击百度一下,不就完成...

  • 你真的会搜索吗?

    经常在群里看到有人问,怎么找电子书? 看到这个我也在我的群介绍过很多次,但依然有人会继续问题,今天就介绍一下我是怎...

  • 你真的会搜索吗1

    你有问题会经常上网搜索吗? 你的搜索习惯是什么呢?比如,你想搜索乞力马扎罗峰的高度,你是输入:“乞力马扎罗有多高”...

  • 二分查找代码实现

    from 你真的会写二分查找吗?

  • Algorithm进阶计划 -- 二分搜索

    二分搜索二分搜索模板二分搜索运用 1. 二分搜索模板 二分搜索(二分查找)也称折半查找(Binary Search...

网友评论

      本文标题:2018-12-04 - 你真的会二分搜索吗?

      本文链接:https://www.haomeiwen.com/subject/zkdvcqtx.html