首页 > 其他分享 >整数去重-题解

整数去重-题解

时间:2024-10-19 17:01:12浏览次数:6  
标签:10 int 题解 样例 整数 重复

整数去重-题解

题目描述

给定含有 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

相关文章

  • P4050 麻将 题解
    不愧是ZJOI。题意:有\(n\)种麻将牌,每种四张。定义"胡牌"为小鸡胡或普通七小对。给定初始\(13\)张牌,将剩下\(4n-13\)张牌随机排列,问期望摸多少张牌能胡(假设采用最优决策)。\(n\le100\)。先考虑怎么判定是否胡牌。\(cnt[i]\)表示前\(i\)种牌能凑出多少个对子,\(f[i][j]......
  • P10532 [XJTUPC2024] 筛法 题解
    ~~打表可知答案为$n^2$~~一种几何证明,方法来自于讲评。考虑把$n^2$个整点放到坐标系中,满足$(x,y)(x\len,y\len)$。现在从原点向每个满足$(x,y)(x\perpy)$的点引出一条射线,显然每个点都会唯一的被一条射线覆盖到,因为$(\dfrac{x}{\gcd(x,y)},\dfrac{y}{\g......
  • P3571 [POI2014] SUP-Supercomputer 题解
    P3571「POI2014」SUP-Supercomputer题解一道“较”水的黑题(可一开始苦思冥想还是不会)。本蒟蒻的第一篇黑题题解,求赞。题意简化给定一棵$n$个节点、根节点为$1$的有根树。$q$次询问中每次给定一个$k$,输出需要最少用几次操作次数删除完整棵树。每次操作可以选择删......
  • P6533 [COCI2015-2016#1] RELATIVNOST 题解
    考虑当$q=0$时怎么做。注意到性质$c\le20$,因此不妨正难则反,将**至少有$c$个人购买彩色画**的方案数转化为总方案数减去**不足$c$人购买彩色画的方案数**。这个是一个类似凑数的dp,不妨考虑背包。我们有$f_{i,j}$表示前$i$人中**恰好**$j$人购买彩色画的方......
  • 顺序表实现 表LA和表LB的并集、交集、大整数相加
    #include<iostream>usingnamespacestd;#include<math.h>#defineMAXSIZE100#defineERROR0#defineOK1typedefstruct{//定义顺序表  int*elem;  intlength;}SqList;typedefintStatus; voidInitList(SqList&L)//创建顺序表{  L.elem......
  • 链表实现两个链表LA和LB的交集、并集、大整数相加
    #include<iostream>usingnamespacestd;#include<math.h>#defineOK1#defineERROR0typedefintStatus; typedefstructLNode{    intdata;      structLNode*next;     }LNode,*LinkList;   intListLength(LinkListL)......
  • [CF1616H] - Keep XOR Low 的题解
    一道比较神奇的题目,状态显得比较扯淡,但是就是能过!先建立出trie树,设\(dp_u\)表示以\(u\)为根的子树内的答案。但我们发现,若\(x\)的当前位为\(1\),那么问题就没法根据他的左右子树求解了,怎么办呢。考虑一个很扯淡的状态,设\(dp_{u,v}\)表示考虑了\(u,v\)为根的子树,他......
  • 牛客练习赛130-A题题解
    牛客练习赛130-A题题解题目描述如下:给定两个整数x,y,jackle希望把x变成y。他每次可以进行如下两种操作之一:选择任意一个整数z,令x=x&z。选择任意一个整数z,令x=x|z。请问最少操作几次可以把x变成y。输入描述:本题有多组测试数据。第一行输入1个正整数T(1≤T......
  • [ABC134F] Permutation Oddness 题解
    T5[ABC134F]PermutationOddness很无敌的一道题。(好像是我第一次用无敌这个词把\(p_i\)和\(i\)的对应关系转化为球和盒子的配对问题,则原式中的绝对值顺利成章地就变成类似距离的一个东西。那么设\(f_{i,j,k}\)表示前\(i\)个球和盒子(注意球和盒子是一起考虑的,所以\(i......
  • [ARC185D] Random Walk on Tree 题解
    一个很套路的做法。思路题目要求走完整个树的时间,这并不好算,容易想到min-max容斥。依据min-max容斥,我们可以轻松把它转化成第一次走到所有子集的时间。考虑在这道题中,有什么特殊的。第一,任何包含根节点的子集答案都是零。第二,由于我们只关心第一次走到的点的时间,因此假......