【华为OD】C卷真题 100%通过:数组去重和排序 C/C++实现

华为OD 数组去重和排序 C++源码实现,100%通过

目录

题目描述:

示例1

代码实现:


题目描述:

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

输入描述

一个数组

输出描述

去重排序后的数组

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

1,3,3,3,2,4,4,4,5

输出

3,4,1,2,5

备注

数组大小不超过100

数组元素值大小不超过100

代码实现:

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int getIdx(vector &arr, int tar) {
	for (int i = 0; i < arr.size(); ++i) {
		if (arr[i] == tar) return i;
	}
	return -1;
}
bool cmp(vector &first, vector &second) {
	if (first[1] != second[1]) {
		return first[1] > second[1];
	}
	else {
		return first[2] < second[2];
	}
}
int main()
{
	string s;
	getline(cin, s);
	replace(s.begin(), s.end(), ',', ' ');
	stringstream ss(s);
	int v;
	vector arr;
	unordered_map ump;
	while (ss >> v) {
		arr.push_back(v);
		ump[v]++;
	}
	vector> ans;
	for (auto it : ump) {
		ans.push_back({ it.first,it.second,getIdx(arr,it.first) });
	}
	sort(ans.begin(), ans.end(), cmp);
	for (int i = 0; i < ans.size() - 1; ++i) {
		cout << ans[i][0] << ",";
	}
	cout << ans.back()[0] << endl;
	return 0;
}

你可能感兴趣的:(华为OD,算法,数据结构,华为od,c++,c语言)