题目描述
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。 例如:数组 $A = \{1, 1, 2\}$,你的程序应该输出 $2$ 即新数组的长度,新数组为 $\{1, 2\}$。 要求:不能新开数组分配额外的空间,即常数空间限制。
输入
输入一个整数 $n(1 \leq n \leq 1000)$。 接下来一行 $n$ 个整数 $A_i(-1000 \leq A_i \leq 1000)$,表示数组 $A$ 中的每个元素。
输出
输出一个整数,表示新数组长度。
样例输入
5 0 0 1 1 2
样例输出
3
分析:终于找到水题了!开心。这题就是用map方便计数就好,或者set去重也可以。
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #define LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; map<int,bool>nn; int n; void init(){ cin>>n; while(n--){ int tmp; cin>>tmp; nn[tmp]=true; } } void solve(){ int ans=0; map<int,bool>::iterator iter; for(iter=nn.begin();iter!=nn.end();++iter)ans+=(iter->second?1:0); cout<<ans<<endl; } int main() { init(); solve(); return 0; }
原文地址:https://www.cnblogs.com/Rhythm-/p/9339304.html
时间: 2024-10-10 19:53:16