JSK 11: 移除數組中的重復元素
阿新 • • 發佈:2018-07-20
names sizeof 一個 range ostream 配額 block queue algo
題目描述
給定一個升序排列的數組,去掉重復的數,並輸出新的數組的長度。 例如:數組 $A = \{1, 1, 2\}$,你的程序應該輸出 $2$ 即新數組的長度,新數組為 $\{1, 2\}$。 要求:不能新開數組分配額外的空間,即常數空間限制。輸入
輸入一個整數 $n(1 \leq n \leq 1000)$。 接下來一行 $n$ 個整數 $A_i(-1000 \leq A_i \leq 1000)$,表示數組 $A$ 中的每個元素。輸出
輸出一個整數,表示新數組長度。樣例輸入
樣例輸出
分析:終於找到水題了!開心。這題就是用map方便計數就好,或者set去重也可以。
#include <iostream> #includeView Code<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) #definefill(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; }
JSK 11: 移除數組中的重復元素