整数去重-题解
题目描述
给定含有 n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
输入格式
输入包含两行:
第一行包含一个正整数 n(1<=n<=20000),表示第二行序列中数字的个数;
第二行包含 n 个整数,整数之间以一个空格分开。每个整数大于等于 10 、小于等于 100。
输出格式
输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。
样例 #1
样例输入 #1
5
10 12 93 12 75
样例输出 #1
10 12 93 75
解题思路:
这是一道比较简单的语法题,我们可以这样思考:要去掉数组中的重复元素,我们是不是可以先把重复元素的位置记录下来,在遍历的时候跳过它们,然后把剩下的元素输出出来.
AC代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int a[N],q[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int count=0; //记录q数组的大小
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++){ //遍历i右边的所有数,找到与a[i]相等的数。
if(a[i]==a[j]){
q[++count]=j; //将重复数的下标记录到q数组
break;
}
}
}
vector<int>v; //开一个vector数组,存储非重复数
bool flag=0; //记录是否为重复数的标志
for(int i=1;i<=n;i++){
for(int j=1;j<=count;j++){
if(i==q[j]){
flag=1; //若遍历到重复数,则让flag置1
break; //跳过这个数
}
flag=0; //flag重新初始化,否则flag的值会一直为1
}
if(!flag){
v.push_back(a[i]); //若不是重复数,则将它加入到v数组
}
}
for(const auto&elem:v)
{
cout<<elem<<" ";
}
return 0;
}
标签:10,int,题解,样例,整数,重复
From: https://www.cnblogs.com/xie-blog/p/18476109