原题目: 1144 The Missing Number (20 分).
题意
给n个数字,找到不在这个数字列表⾥面的最⼩的正整数。
分析
将每个数字出现的次数存储在map⾥面, num从1开始,如果m[num] == 0说明不存在,则输出这个num。
知识点
STL之映射map
特性: 按照 键 将 键值对 按从小到大排序。
&1 头文件
#include <map>
using namespace std;
&2 声明
map<string, int> m; //左键,右值;且int型的值默认从0开始
&3 增改
m["hello"] = 2; //括号内为键,赋予的是值;改操作可作为增/改
//int型的值可自增赋值
m["world"]++; //可用于计算某键的个数
&4 查找
//输出某键的值
cout << m["hello"];
//输出第一个元素的键和值
cout << m.begin()->first << endl; //first指键
cout << m.begin()->second << endl; //second指值
//输出最后一个元素的键和值
cout << m.rbegin()->first << endl; //first指键
cout << m.rbegin()->second << endl; //second指值
//用迭代器遍历,输出map中的所有元素
for ( auto it=m.begin(); it!=m.end(); it++ ){
cout << it->first << " " << it->second;
}
&5 大小
m.size();
CODE
#include <iostream>
#include <map>
using namespace std;
int main()
{
int n, a, num = 0;
cin >> n;
map<int, int> m;
for ( int i=0; i<n; i++ ){
cin >> a;
m[a]++; //键为a的值自增1
}
while(++num){ //从1开始找最小正整数
if ( m[num]==0 )
break;
}
cout << num;
return 0;
}