c++set 与 map(1)题解(爱思创)

前言:

这篇文章是为了帮助一些

像我这样的菜鸟

找到简单的题解

问题描述:

题目描述

依次读入 n个整数 ai​ ,其中可能存在相同的元素。

对于每次读入的元素 ai​,统计此时它一共出现的次数 ci​,并在最后统计出 n 个元素中一共有多少个不重复的元素。

输入格式

第一行:n (1≤n≤105) 。

第二行:n 个用空格隔开的整数ai​ (−109≤ai​≤109) 。

输出格式

输出共 n+1 行:

  • 第 1∼n 行:输出当前元素 ai​ 及此时 ai​ 出现的次数 ci​,中间用 1 个空格隔开。

  • 第 n+1 行:一个整数,为 n 个元素中不重复元素的个数。

样例输入

7
3 1 5 2 4 3 5

样例输出

3 1
1 1
5 1
2 1
4 1
3 2
5 2
5

问题解析:

这道题非常的简单

思路1: 

用map做

初始化每个元素为0

读入一个就加入一个

思路2: 

用set 与 multiset配合做

一个添加一个计数


本文选择思路一解答

好处:

1.不需要迭代器

2.简单方便


重点:

题目要求输出每一次查询的当前状态

就是这个数前面加上这次它出现了几次

不是总体有几次(我第一次就没看到)

题目代码:

我们还是先把map和变量写好

map<int,int> mp;//两个都为int 一个为变量名 一个计数
int n,a[100005],i;

然后是读入和初始化

cin>>n;//读入行数
for(i=1;i<=n;i++)//也可以从0开始
{
	cin>>a[i];//读入数组每个元素信息
	mp[a[i]]=0;//mp中添加元素并初始化个数都为0
}

初始化玩了可以直接输出了

计数和输出部分

for(i=1;i<=n;i++)
{
	mp[a[i]]++;//给当前个数加1
	cout<<a[i]<<" "<<mp[a[i]]<<endl;//输出数字和个数 如题
}
cout<<mp.size();//最后输出一共有几个数字

完整代码:

#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;//两个都为int 一个为变量名 一个计数
int n,a[100005],i;
int main()
{
	cin>>n;//读入行数
	for(i=1;i<=n;i++)//也可以从0开始
	{
		cin>>a[i];//读入数组每个元素信息
		mp[a[i]]=0;//mp中添加元素并初始化个数都为0
	}
	for(i=1;i<=n;i++)
	{
		mp[a[i]]++;//给当前个数加1
		cout<<a[i]<<" "<<mp[a[i]]<<endl;//输出数字和个数 如题
	}
	cout<<mp.size();//最后输出一共有几个数字
	return 0;
}

题目测评:

 样例通过了

成功AC 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值