现有一个整数数组 arr ,请将数组中的每个元素替换成他们排序后的序号。序号编号的规则如下: 序号从 1 开始编号; 一个元素越大序号越大,若两个元素相等,则序号相同; 每个数字的序号都应当尽可能的小。 输入输出格式 输入格式 第一行有一个整数 arrSize ,表示数组 arr 的大小; 第二行有 arrSize 个整数,分别表示数组 arr 的所有元素,每个整数用一个空格隔开。 输出格式 一行输出数组 arr 中元素排序后的序号,有 arrSize 个整数,每个整数用一个空格隔开。用c++完成
时间: 2024-03-25 18:40:05 浏览: 56
好的,以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
vector<int> temp = arr;
sort(temp.begin(), temp.end());
unordered_map<int, int> mp;
int index = 1;
for (int i = 0; i < n; i++) {
if (mp.find(temp[i]) == mp.end()) {
mp[temp[i]] = index++;
}
}
for (int i = 0; i < n; i++) {
cout << mp[arr[i]] << " ";
}
cout << endl;
return 0;
}
```
思路:
首先,读入整数数组 arr 和数组大小 n。
其次,为了保证排名的连续性,我们需要对数组 arr 进行排序,并且使用一个容器与其排名进行对应。这里我们使用一个 unordered_map 容器,将数组 arr 中的元素值作为 key,将其对应的排名作为 value 存储。排名从 1 开始,每当出现一个新的元素时,我们就将其排名加 1。
最后,我们遍历数组 arr,输出每个元素的排名即可。
注意点:
- 排序后的数组 temp 不能直接使用 arr 的地址,因为 sort 函数会直接修改其内容。
- 在使用 unordered_map 容器时,要注意先使用 find 函数查找 key 是否存在,再进行相应的操作。
阅读全文