删除重复元素保留1个
题目描述
输入n 个整型数,把其中重复出现的元素删去(如出现三个5,则只保留第一次出现的5,删去后两个5),将剩余的元素顺次输出。整数个数 n 不大于300
关于输入
第1行,输入整数的个数 n;
第2行,输入 n 个整数,整数之间以空格间隔;
关于输出
按原有顺序输出新数组(删除的不输出),数据之间以逗号间隔
例子输入
10 5 6 7 5 8 5 7 9 8 6
例子输出
5,6,7,8,9
解题分析
巧妙地利用数组去标记数字是否重复。
代码实现1
#include <stdio.h>
#include <string.h>
#define MAX_NUM 300
int main() {
int n, i, num;
int hash[MAX_NUM] = {0}; // 哈希表,用于跟踪已经出现过的数字
scanf("%d", &n); // 输入数字的数量
for(i = 0; i < n; i++) {
scanf("%d", &num); // 输入数字
// 如果数字不在哈希表中,就把它添加到哈希表中,并输出它
if(hash[num] == 0) {
hash[num] = 1;
if(i == 0) {
printf("%d", num);
} else {
printf(",%d", num);
}
}
}
printf("\n");
return 0;
}
代码实现2
#include <iostream>
using namespace std;
int num[305];
bool is[305];
int main() {
int n; cin>>n;
for(int i=0;i<n;i++){
cin>>num[i];
}
for(int i=0;i<n;i++){
if(is[i]==1) continue;
for(int j=i+1;j<n;j++){
if(num[j]==num[i]){
is[j]=1;
}
}
}
for(int i=0;i<n;i++){
if(is[i]==1) continue;
if(i==0) cout<<num[i];
else cout<<","<<num[i];
}
return 0;
}