T609548 【标记数组模板】数字m是否出现过

解题思路

这道题目要求判断一个数字m是否在一个给定的数组中出现过。解题的关键在于如何高效地进行查询。

方法思路

  1. 标记数组法:我们可以使用一个标记数组vis来记录哪些数字出现过。数组的索引代表数字本身,数组的值表示该数字是否出现过(1表示出现过,0表示未出现过)。

  2. 输入处理:首先读取数组长度n,然后读取n个数字,每读取一个数字x,就将vis[x]标记为1。

  3. 查询处理:读取查询数字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;
}

 

posted @ 2025-05-20 17:05  CRt0729  阅读(34)  评论(0)    收藏  举报