首页 > 试题广场 >

序列中整数去重

[编程题]序列中整数去重
  • 热度指数:25721 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。



输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

示例1

输入

5
10 12 93 12 75

输出

10 12 93 75
#include <stdio.h>

int main(){
	int n, x, arr[30];
	scanf("%d",&n);
    for(int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    for(int i = 0; i < n; i++){
    	int count = 0;
    	for(int j = 0; j <= i; j++){ //查询(0, i)之间当前元素出现次数
    		if(arr[i] == arr[j])
    			count++;	
		}
		if(count == 1) //大于1说明重复
            printf("%d ", arr[i]);
	} 
	return 0;
}

发表于 2022-06-06 16:14:16 回复(0)
import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            Set<String> set = new LinkedHashSet<>();
            for (int i = 0; i < n; i++) {
                set.add(Integer.toString(sc.nextInt()));
            }
            String res = set.stream().collect(Collectors.joining(" "));
            System.out.println(res);
        }
    }
}

发表于 2020-09-23 14:06:00 回复(0)
告诉了整数范围在提示用计数数组
#include <stdio.h>
int main()
{
    int cnt[5005],a[1005],n,i,j,x;
    scanf("%d",&n);
    int t=0;
    while(n--){
        scanf("%d",&x);
        if(cnt[x]==0){
            cnt[x]++;
            a[t++]=x;
        }
    }
    for(i=0;i<t;i++){
        if(i==t-1) printf("%d\n",a[i]);
        else printf("%d ",a[i]);
    }
}

发表于 2020-04-10 18:16:43 回复(0)
#include <iostream>
using namespace std;
int main()
{
    int a[1000],b[5000]={0},n;//b为标记数组
    cin>>n;
    for(int i=0;i<n;++i)
        cin>>a[i];
    for(int i=0;i<n;++i)
        if(b[a[i]]==0)//没有出现过
        {
            cout<<a[i]<<" ";
            b[a[i]]=1;//标记已输出
        }
    return 0;
}

发表于 2020-03-27 13:03:53 回复(1)
n=input()
a=list(map(int,input().split()))
a_l=list(set(a))
a_l.sort(key=a.index)
for i in a_l:
    print(i,end=' ')

发表于 2021-06-02 17:42:30 回复(0)
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[n],i;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    {
       for(int j=i+1;j<n;j++)
       {
           if(a[j]==a[i])
               a[j]=0;/*重复的数字赋值为0,后面用来判断是否输出*/
       }
    }
  for(i=0;i<n;i++)
  {
      if(a[i]!=0)
          printf("%d ",a[i]);
  }
    return 0;
}

发表于 2021-03-06 19:18:32 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int len,arr_num,flag_same = 0;
    cin>>len;
    int arr[len];
    for(int i = 0;i<len;i++){
        cin>>arr_num;
        arr[i] = arr_num;
        
        
    }
    for(int j = 0;j<len;j++){
        for(int k = 0;k<j;k++){
            if(arr[j] == arr[k]){
                flag_same = 1;
                break;
            }
            
        }
        if(flag_same == 1){
            //注意标识 要还原为0
            flag_same = 0; 
            continue;
        }
        cout<<arr[j]<<" ";
        
        
        
    }
}

发表于 2020-10-01 13:08:21 回复(0)
#include<stdio.h>
int main()
{
    int n = 0,arr[1000] = {0},count = 0;
    scanf("%d",&n);
    for(int i = 0;i < n;i++)
        scanf("%d",&arr[i]);
    int i = 0,j = 0,k = 0;
    for(i = 0;i < n;i++)
    {
        for(j = i + 1;j < n;j++)
        {
            if(arr[i] == arr[j])
            {
                for(k = j;k < n - 1;k++)
                    arr[k] = arr[k + 1];
                arr[k] = '\0';
                n--,j--;
            }
        }
        printf("%d ",arr[i]);
    }
    return 0;
}

发表于 2022-07-31 23:33:07 回复(0)
#include <stdio.h>
int main(){
    int n;
    scanf("%d", &n);
    int a[n];
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for(int i = 0; i < n; i++){
        for(int j = i+1; j < n; j++){
            if(a[i] == a[j]){
                for(int k = j; k < n; k++)
                    a[k] = a[k+1];
                n--;
                j--;
            }
        }
    }
    for(int i = 0; i < n; i++)
        printf("%d ", a[i]);
    return 0;
}

发表于 2022-07-16 22:19:42 回复(0)
#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[1000];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
        int j;
        for(j=0;j<i;j++)
        {
            if(arr[j]==arr[i])
            {
                break;
            }
        }
        if(j==i)
        {
            printf("%d ",arr[i]);
        }
    }
}

发表于 2022-07-01 11:37:30 回复(0)
#include <iostream>
using namespace std;
const int N = 1010;
int st[N];

int main()
{
    int n, x;
    cin >> n;
    for (int i = 0; i < n; i ++ ) 
    {
        cin >> x;
        if (!st[x]) 
        {
            st[x] = 1;
            cout << x << ' ';
        }
    }
}

发表于 2022-02-26 14:42:45 回复(0)
#include <stdio.h>
//下面的法一,会将该输入进行递增排序后输出,不会保留输入的顺序,还是需要重新优化的,看法二
/*
int main()
{
    int n = 0;
    int arr[5001] = {0};
    int i = 0;
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        //进行整数的存储
        int tmp = 0;
        scanf("%d",&tmp);
        if( arr[tmp] == 0 )
            arr[tmp]=1;
    }
    for(i=0; i<5001; i++)
    {
        if(arr[i] == 1)
            printf("%d ",i);
    }
    return 0;
}
*/
//法二:此方法可能复杂度会过大,如要进一步优化,则可以参考方法三使用两个数组,在输入的时候便和输出数组进行对比!
/*
int main()
{
    int n = 0;
    int arr[1000];//用于存储元素
    scanf("%d",&n);
    int i = 0;
    //输入
    for(i=0; i<n; i++)
    {
        scanf("%d",&arr[i]);
    }
    //去重
    for(i=0; i<n; i++)
    {
        //判断下标为i的元素 arr[i] 是否在后面位置出现
        int j = 0;
        for(j=i+1; j<n; j++)
        {
            if(arr[i] == arr[j])
            {
                //去重
                //将j+1的位置的元素全部向前移动一位!
                int k = 0;
                for(k=j; k<n-1; k++)//将k的范围最大固定到n-1,防止其越界访问
                {
                    arr[k]=arr[k+1];
                }
                n--;
                j--;//为了避免j跳过元素,需要--
            }
             
        }
    }
    //输出
    for(i=0; i<n; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}*/
//法三

int main()
{
    int n; 
    //第一行包含一个正整数n(1 ≤ n ≤ 1000)
    int arr1[1000]={0}; //作为输入数组存储信息
    int arr2[1000]={0}; //作为输出数组用于筛选去重后的数字
    scanf("%d",&n);
    int num=0;//用于统计去重后元素的个数
    for(int i=0;i<n;i++){
        int sum=0;//用于表示该元素是否为重复元素
        scanf("%d ",&arr1[i]);//输入数组①
        for(int j=0;j<i;j++){
            if(arr2[j]==arr1[i]){ //检测输出数组②中是否已经存在此数
                sum=1;
                break;
            }
        }
        //sum=0说明if循环未进入则输出数组中无此数
        //将满足的值输入二数组
        if(sum==0)
        {   //说明此时为非重复元素
            arr2[num]=arr1[i];//将该元素存储到arr2输出数组中
                 num++;//个数++
        }
    }
    for(int i=0;i<num;i++){ //输出去重后的数组
        printf("%d ",arr2[i]);
    }
    return 0;
}

发表于 2022-02-11 22:52:27 回复(0)
#include<stdio.h>
int is_repeat(int tmp,int n,int arr[])
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        if (tmp == arr[i])
        {
            return 0;
        }
    }
    return 1;
}

int main()
{
    int arr[1000] = { 0 };
    int n = 0;
    int i = 0;
    int flag = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
        flag=is_repeat(arr[i],i,arr);
        if (flag)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
发表于 2021-12-10 15:32:49 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        List<Integer> s = new ArrayList<>();
        while (sc.hasNext()){
            int n = sc.nextInt();
            if(!s.contains(n)){
                s.add(n);
                System.out.print(n+" ");
            }
        }
    }
}
发表于 2021-07-30 14:46:23 回复(0)
#include<iostream>
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
     for(int i=0;i<n;i++){
       for(int j=0;j<n;j++){
         if(i!=j&&a[i]==a[j]){
            a[j]=0;
        }
        }
    }
    for(int i=0;i<n;i++){
        if(a[i]!=0){
           printf("%d ",a[i]);   
        }
      
    }
    return 0;
}

发表于 2020-08-12 20:36:53 回复(0)
#include <bits/stdc++.h>
#include<map>
using namespace std;

int main(){
    int n,k=0;
    int data;
    vector<int> a;
    cin>> n;
    cin.ignore();
    if(n>0 && n<1001)
        for(int i=0;i<n;i++){
            cin>>data;
            auto e = find(a.begin(),a.end(),data);
            if(e==a.end())
                a.push_back(data);
        }
    for(auto j:a){
        cout<<j<<" ";
    }
    return 0;
}

编辑于 2020-08-04 22:45:14 回复(0)
#include<stdio.h>

int main() {
    int n,i,j,p=0,flag=1;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        for(j=0;j<i;j++){
            if(a[i]==a[j]){
                flag=0;
                break;  //此处为continue或者break甚至两者都不写,都是可以的,因为这个for里面,没有使flag再=1的语句
            }
        }
        if(flag)
             printf("%d ",a[i]);
        flag=1;
    }
    return 0;
    
}
不另构数组,直接输出,利用输入输出特性
发表于 2020-03-23 18:35:13 回复(1)
#include<iostream>
using namespace std;

int main()
{
    int a[5001]={0};
    int m,index;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>index;
        if(a[index]==0)
        {
            a[index]=index;
            cout<<a[index]<<" ";
        }
    }
    return 0;
}

发表于 2020-07-23 21:57:51 回复(2)
#include <stdio.h>

int main()
{
    //int arr[1006] = {0};
    int count[5006] = {0};
    int n = 0,num = 0;
    scanf("%d",&n);
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&num);
        count[num]++;
        if(count[num]<2) printf("%d ",num);
    }
    return 0;
}

发表于 2023-03-14 21:24:55 回复(0)
#include<stdio.h>
int main()
{
    int a=0;
    int A[1000]={0};
    int T=0;
        scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        scanf("%d",&A[i]);
    }
    for(int i=0;i<a;i++)
    {
        T=0;
        for(int j=0;j<i;j++)
        {
            if(A[j]==A[i])
            {
                T=1;
            }
        }
        if(T==0)
        {
            printf("%d ",A[i]);
        }
    }
    return 0;
}

感觉应该还能更简洁?
发表于 2021-12-13 22:54:25 回复(2)