离散化
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是假的去除。他只会像上面那样操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具