数组排序后的序号 任务描述 提交记录 编程语:C++ 难度:简单 单个测试集评测时长限制:3秒 题目描述 现有一个整数数组 arr ,请将数组中的每个元素替换成他们排序后的序号。序号编号的规则如下: 序号从 1 开始编号; 一个元素越大序号越大,若两个元素相等,则序号相同; 每个数字的序号都应当尽可能的小。 输入输出格式 输入格式 第一行有一个整数 arrSize ,表示数组 arr 的大小; 第二行有 arrSize 个整数,分别表示数组 arr 的所有元素,每个整数用一个空格隔开。 输出格式 一行输出数组 arr 中元素排序后的序号,有 arrSize 个整数,每个整数用一个空格隔开
时间: 2024-02-28 12:57:50 浏览: 340
可以使用 STL 中的 sort 函数对数组进行排序,然后再遍历一遍数组,记录每个元素对应的序号即可。
C++ 代码如下:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
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> sorted_arr = arr;
sort(sorted_arr.begin(), sorted_arr.end());
vector<int> index(n);
for (int i = 0; i < n; i++) {
auto it = lower_bound(sorted_arr.begin(), sorted_arr.end(), arr[i]);
index[i] = distance(sorted_arr.begin(), it) + 1;
}
for (int i = 0; i < n; i++) {
cout << index[i] << " ";
}
cout << endl;
return 0;
}
```
其中 lower_bound 函数用于在有序数组中查找第一个大于等于给定值的元素,并返回该元素的迭代器位置。由于序号从 1 开始编号,因此需要加上 1。
时间复杂度为 O(n log n),空间复杂度为 O(n)。
阅读全文