概述
■ 题目描述
【数组去重和排序】
给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。
输入描述:
一个数组
输出描述:
去重排序后的数组
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1,3,3,3,2,4,4,4,5
输出
3,4,1,2,5
备注
数组大小不超过100 数组元素值大小不超过100。
C++代码实现:
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
static void Split(string input, vector<int> &output, char patten) {
string one_word;
int j = 0;
input += patten;
for (int i = 0; i < input.size(); i++) {
if (input[i] == patten) {
one_word = input.substr(j, i - j);
output.push_back(stoi(one_word));
one_word.clear();
j = i + 1;
}
}
}
static string ArraySort(string str)
{
vector<int> nums;
Split(str, nums, ',');
map<int, int> cnt;
for (int num: nums) cnt[num]++;
vector<int> ACE;
for (int num: nums) {
if (find(ACE.begin(), ACE.end(), num) == ACE.end()) {
ACE.push_back(num);
}
}
vector<pair<int, int>> end;
for (int x: ACE) end.emplace_back(cnt[x], x);
sort(end.begin(), end.end(), [](pair<int, int> &lhs, pair<int, int> &rhs) {
return lhs.first > rhs.first;
});
string res;
for (auto&[_, value]: end) {
res.append(to_string(value));
res.push_back(',');
}
return res.erase(res.size() - 1);
}
};
int main()
{
string input_string;
while (getline(cin, input_string)) {
Solution solo;
cout << solo.ArraySort(input_string) << endl;
}
}
最后
以上就是怕孤单夏天为你收集整理的【华为OD机试真题 C++】数组去重和排序 【2022 Q4 | 100分】的全部内容,希望文章能够帮你解决【华为OD机试真题 C++】数组去重和排序 【2022 Q4 | 100分】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复