• FOJ-1001-Duplicate Pair


    题目:Duplicate Pair
    大意:
    有多组测试数据,输入整数n,接着输入n个整数(integers),这些数字几乎都只出现一次,但其中有一个数出现了两次,请输出这个数。
    题解:
    大数据问题,普通的两个for暴力解决很明显会T,也不能用C++的cin和cout(费时太多)。那么这个问题就转换成如何省时间的一题。

    代码:

    #include <stdio.h>  
    #include <string.h>  
    #define N 1000010  
      
    char a[N];  //定义字符数组,用到memset,节省时间
      
    int main(void)  
    {  
             int n;  
             int i;  
             int j;  
             while(scanf("%d", &n) != EOF)  
             {  
                     memset(a, 0, n);  
                     for(i = 0; i < n; i++)  
                     {  
                              scanf("%d", &j);  
                              if(a[j] == 0) a[j] = 1;
                              else printf("%d
    ", j);  
                     }  
             }  
             return 0;  
    } 
    

    思路分析:
    既然你输入n个数,我就开个n大小的字符数组,数组中所有元素置0,(为省时用memset,所以这里定义的是字符数组,调用#include<string.h>)你输入的每一个数比如说j对应的字符数组的成员是a[j]a[j]代表的就是你的状态,输入j以后如果之前没有和j相同的数(也就是a[j]==0),将其值置为1,代表这个数出现了;如果这个数之前出现了(a[j]==1),就得到我们要的数了。

  • 相关阅读:
    HDU 1224 无环有向最长路
    HDU 1220 简单数学题
    HDU 1203 背包问题
    HDU 1176 DP
    HDU 1159 LCS最长公共子序列
    HDU 1160 排序或者通过最短路两种方法解决
    hdu 2349 最小生成树
    次小生成树的学习
    最小生成树prime算法模板
    poj 1679 判断最小生成树是否唯一
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5302638.html
Copyright © 2020-2023  润新知