c++现有一个整数数组 arr ,请将数组中的每个元素替换成他们排序后的序号。序号编号的规则如下: 序号从 1 开始编号; 一个元素越大序号越大,若两个元素相等,则序号相同; 每个数字的序号都应当尽可能的小。
时间: 2024-02-29 20:51:26 浏览: 88
好的,这是一个简单的算法题。我来为您提供解决方案。
可以使用一个 map 来存储每个不同的数值和其对应的序号。然后遍历数组,将数组中的每个元素替换为其对应的序号即可。
以下是 C++ 的代码实现:
```c++
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main() {
vector<int> arr = {1, 4, 2, 3, 5, 2};
map<int, int> mp;
vector<int> sortedArr(arr);
sort(sortedArr.begin(), sortedArr.end());
int idx = 0;
for (int i = 0; i < sortedArr.size(); i++) {
if (mp.find(sortedArr[i]) == mp.end()) {
mp[sortedArr[i]] = ++idx;
}
}
for (int i = 0; i < arr.size(); i++) {
arr[i] = mp[arr[i]];
}
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为:`1 4 2 3 5 2` 对应的序号为 `1 4 2 3 5 2`。
阅读全文