第五章 ALDS1_4_A:Linear Search 线性搜索

这篇博客介绍了线性搜索的基本概念,它在数列查询中的应用,以及如何利用线性搜索优化查询效率。通过解决ALDS1_4_A问题,展示了线性搜索的实现过程,通过循环遍历和巧妙设置搜索起点来减少计算量,将时间复杂度降低到O(qn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点

线性搜索比较简单,就是从数列的第一个位置开始往后找,直到找到指点的元素,单次搜索的复杂度是 O(n)

问题链接

ALDS1_4_A:Linear Search

问题内容

对于包含n个整数的数列S,查询包含q个不重复元素的T数列中有多少个在数列S中,求出总数。

思路

采用线性搜索的思路去写即可。循环遍历T数组,在S数组中找到指定的元素,时间复杂度是 O(qn) ,为了减少计算,在数列的最后一项设为当前要搜索的元素,则可以减少判断的计算而跳出循环,也就是让数列中一定找到指定元素。

代码

#include<iostream>
#include<cstdio>
using namespace std;

// 线性搜索
bool LinearSearch(int A[], int n, int key) {
    // 将key设置为数列最后一项
    A[n] = key;
    int i = 0;
    while (A[i] != key)
        i++;
    // 如果i不是n,则代表在原来的数列中找到key,
    // 否则代表原来数列中没有key,找到的是刚才插入到最后的元素
    return i != n;
}
int main() {
    int n, q, key;
    int sum = 0;
    int A[10000 + 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 (LinearSearch(A, n, key))
            sum++;
    }
    printf("%d\n", sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值