离散化
1.第一种离散化
这个是分三步操作
-
-
对b数组进行排序去重
-
然后找原数组在b的位置
这个思想因该很简单
比如说数据{6,8,8,9,9,4,5}经过b数组{4,5,6,8,9}之后就变成了{3,4,4,5,1,2,}就缩小了数组范围
可以去重但是效率可能略低一点
2.第二种离散化(去重比较麻烦)
这个就是开个结构体保存值和第几个输入的,然后排序后则可以再次赋上新值
画个表表示一下
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| a.v | 6 | 8 | 9 | 4 | 5 |
| a.id | 1 | 2 | 3 | 4 | 5 |
| 排序后 | |||||
| a.v | 4 | 5 | 6 | 8 | 9 |
| a.id | 4 | 5 | 1 | 2 | 3 |
| rk | rk[4]=1 | rk[5]=2 | rk[1]=3 | rk[2]=4 | rk[3]=5 |
| 最后输出 | |||||
| rk | 3 | 4 | 5 | 1 | 2 |
这个rk数组就是离散化后的a数组但是范围变成了1-5.
3.第三种方法
nums.erase(unique(nums.begin(), nums.end()),nums.end()) ;
查找元素离散化的值就直接用这个函数就可以了
return lower_bound(nums.begin(), nums.end(),x) - nums.begin() + 1 ;//下标从一开始。
为什么可以这样子呢?搜索一下好吧
unique的去重方式是把相同元素移动到数组的最后面。最后将指针移动到不重复的元素的那个位置上。所以再用个erase就可以擦掉所有重复元素即可。
unique是假的去除。他只会像上面那样操作。

浙公网安备 33010602011771号