T609548 【标记数组模板】数字m是否出现过
解题思路
这道题目要求判断一个数字m是否在一个给定的数组中出现过。解题的关键在于如何高效地进行查询。
方法思路
-
标记数组法:我们可以使用一个标记数组
vis来记录哪些数字出现过。数组的索引代表数字本身,数组的值表示该数字是否出现过(1表示出现过,0表示未出现过)。 -
输入处理:首先读取数组长度n,然后读取n个数字,每读取一个数字x,就将
vis[x]标记为1。 -
查询处理:读取查询数字m后,直接检查
vis[m]的值是否为1。如果是1,说明数字m出现过,输出"YES";否则输出"NO"。
这种方法的时间复杂度为O(n),因为我们需要遍历整个数组一次进行标记,查询操作是O(1)的。
#include<bits/stdc++.h> using namespace std; int n,m,x,vis[100005]; // 定义变量:n为数组长度,m为查询数字,x为临时变量,vis为标记数组 int main() { //题目1:标记数字是否出现过 cin >> n; // 读取数组长度n for(int i = 1; i <= n; i++){ // 循环读取n个数字 cin >> x; // 读取当前数字x vis[x] = 1; // 将vis数组中x对应的位置标记为1,表示x出现过 } cin >> m; // 读取查询数字m if(vis[m] == 1){ // 检查vis数组中m对应的位置是否为1 cout << "YES"; // 如果是1,输出YES } else cout << "NO"; // 否则输出NO return 0; }

浙公网安备 33010602011771号