華為OD?數組去重和排序 C++源碼實現,100%通過
目錄
題目描述:
示例1
代碼實現:
題目描述:
????????給定一個亂序的數組,刪除所有的重復元素,使得每個元素只出現一次,并且按照出現的次數從高到低進行排序,相同出現次數按照第一次出現順序進行先后排序。
輸入描述
一個數組
輸出描述
去重排序后的數組
示例1
輸入輸出示例僅供調試,后臺判題數據一般不包含示例
輸入
1,3,3,3,2,4,4,4,5
輸出
3,4,1,2,5
備注
數組大小不超過100
數組元素值大小不超過100
代碼實現:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <sstream>using namespace std;int getIdx(vector<int> &arr, int tar) {for (int i = 0; i < arr.size(); ++i) {if (arr[i] == tar) return i;}return -1;
}
bool cmp(vector<int> &first, vector<int> &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<int> arr;unordered_map<int, int> ump;while (ss >> v) {arr.push_back(v);ump[v]++;}vector<vector<int>> 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;
}