2 条题解
-
0
- 用
sort(),unique(),erase(),lower_bound()离散化一个数组
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n = 6; vector<int> a = {15, 14, 14, 16, 11, 11}; // 把 a 数组复制一遍到 c 数组, 用于离散化 vector<int> c = a; cout << "原数组:\n"; for (int i = 0; i < (int) c.size(); i++) cout << c[i] << ' '; cout << "\n\n"; // 将 c 从小到大排序, c = [11, 11, 14, 14, 15, 16] sort(c.begin(), c.end()); cout << "排序后:\n"; for (int i = 0; i < (int) c.size(); i++) cout << c[i] << ' '; cout << "\n\n"; // unique() 用于将一个排好序的数组去重 // 把可以删除的数放到后面, 并返回第一个可以删除的数的迭代器 auto it = unique(c.begin(), c.end()); cout << "unique() 后:\n"; for (int i = 0; i < (int) c.size(); i++) cout << c[i] << ' '; cout << "\n\n"; // 将 c 后面可以删除的数删除 c.erase(it, c.end()); cout << "删除重复的数后:\n"; for (int i = 0; i < (int) c.size(); i++) cout << c[i] << ' '; cout << "\n\n"; // 排序去重后, c 数组中数的个数 int e = c.size(); cout << "排序去重后数组的大小= " << e << "\n\n"; for (int i = 0; i < (int) a.size(); i++) { // 把 a[i] 离散化到 [1, e] a[i] = lower_bound(c.begin(), c.end(), a[i]) - c.begin() + 1; } cout << "离散化后:\n"; for (int i = 0; i < (int) a.size(); i++) cout << a[i] << ' '; cout << "\n\n"; /* 将 a 数组 离散化, 可以简写成下面的样子: vector<int> c = a; sort(c.begin(), c.end()); c.erase(unique(c.begin(), c.end()), c.end()); for (int i = 0; i < n; i++) { a[i] = lower_bound(c.begin(), c.end(), a[i]) - c.begin() + 1; } */ return 0; } - 用
信息
- ID
- 114
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 58
- 已通过
- 11
- 上传者