我是靠谱客的博主 怕孤单夏天,最近开发中收集的这篇文章主要介绍【华为OD机试真题 C++】数组去重和排序 【2022 Q4 | 100分】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

【数组去重和排序】

给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。

输入描述:

一个数组

输出描述:

去重排序后的数组

示例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分】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部