离散化
离散化
思路
数据的范围非常大或者其中含有负数,但数据本身的个数并不是很多(远小于数据范围)。在这种情况下,如果每个数据元素的具体值并不重要,重要的是他们之间的大小关系的话,我们可以先对这些数据进行离散化,使数据中的最大值尽可能小且保证所有数据都是正数。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[100], b[100], n, m;
cin >> n;
for (int i = 1; i <= n; i ++)
{
cin >> a[i];
b[i] = a[i]; //把数组复制一份
}
sort(a + 1, a + n + 1);//先排序
int size = unique(a + 1, a + n + 1) - a - 1;//去重
for (int i = 1; i <= n; i ++)
{
b[i] = lower_bound(a + 1, a + size + 1, b[i]) - a;//确定序号
}
for (int i = 1; i <= n; i ++)
{
cout << b[i] << " ";//输出,可有可无,一般是存储并进行操作
}
return 0;
}

浙公网安备 33010602011771号