g217 - A.成雙成對(pairs)
題目描述
題目給定一組數字,要求判斷是否能將這些數字兩兩配對,且每一對中的兩個數字必須不同。
解題思路
此題的核心在於判斷是否有某個數字出現的次數超過總數的一半。如果存在這樣的數字,則無法滿足每一對數字都不同的條件,因為最多只能配對到總數的一半。 程式碼使用一個 map (Hash Table) 來統計每個數字出現的次數。然後,遍歷 map,找出出現次數最多的數字。如果這個數字出現的次數大於 n/2,則輸出 "No",否則輸出 "Yes"。
複雜度分析
- 時間複雜度: O(n)
- 空間複雜度: O(n)
程式碼
#include <iostream>
#include <map>
using namespace std;
int n,ba,k,t;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cin >> t;
while(t--){
cin >> n;
int ma=0;
map <int,int> mp;
for(int i=0;i<n;++i){
cin >> k;
mp[k]++;
ma=max(ma,mp[k]);
}
if(ma>n/2){
cout << "No\n";
}
else{
cout << "Yes\n";
}
}
}