题目描述
众所周知,吕老师热衷于ACM事业,他非常喜欢刷题,当然吕老师是个大佬,大家都知道大佬刷过一个题之后就会记在脑子里,所以吕老师讨厌刷到重复的题,现在给你吕老师计划的刷题清单,你需要找到其中重复出现的题目
输入
第一行输入一个正整数n,代表吕老师要刷的题目数量 (1 ≤ n ≤ 100000)
第二行输入n个正整数a[1......n],代表每道题目的编号 (1 ≤ a[i] ≤ 100000)
输出
按照从小到大的顺序在一行中输出重复出现的题目编号,如果没有重复出现的题目则输出-1
样例输入
7
1 2 3 4 3 1 2
样例输出 1 2 3
思路:用值做下标再结合数组实现目的,是一个不错的想法。
#include<stdio.h>
#include<iostream>
using namespace std;
const int N = 100010;//定义固定变量
int arr[N], tem[N];//存值数组和计数数组
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
{
scanf("%d", &arr[i]);
tem[arr[i] ]++;//将值作为下标用来计数
}
int num = 0;
for(int i = 0; i < N; i ++)
{
if(tem[i] > 1)
{
printf("%d ",i);
num ++;//用来判断是否出现重复数字
}
}
if(num == 0) printf("-1\n");
return 0;
}
(萌新上路,有更好的方法或者写的有问题可以多多交流)