题目描述:
在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。
请你重新排列这些条形码,使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案,此题保证存在答案。
思路:
1、利用哈希map记录每个数字出现的次数
2、把数字出现次数按照从大到小的顺序排列
3、然后开始放置数字,先奇数位放置,再偶数位放置
代码如下:
class Solution {
public:
static bool cmp(const pair<int,int>a,const pair<int,int>b){
return a.second>b.second;
}
vector<int> rearrangeBarcodes(vector<int>& barcodes) {
unordered_map<int,int>cnt;
for(int num:barcodes){
cnt[num]++;
}
vector<pair<int,int>>all;
for(pair<int,int>p:cnt){
all.push_back(p);
}
sort(all.begin(),all.end(),cmp);
vector<int>res(barcodes.size(),-1);
int idx=0;
for(int i=0;i<all.size();i++){
int j=0;
while(j<all[i].second){
if(idx>=barcodes.size()){
idx=0;
while(res[idx]!=-1)
idx++;
}
res[idx]=all[i].first;
idx+=2;
j++;
}
}
return res;
}
};