知识点
线性搜索比较简单,就是从数列的第一个位置开始往后找,直到找到指点的元素,单次搜索的复杂度是 O(n)
问题链接
问题内容
对于包含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);
}