离散化--
离散化就是“给稀疏或范围很大的数据编号”,让程序更好处理。
思路:
①排序
②去重
③用下标来表示原始值
代码实现:
//存储所有待离散化的值
vector<int> alls;
//排序
sort(alls.begin(),alls.end());
//去重
alls.erase(unique(alls.begin(),alls.end()),alls.end());
//二分求出x对应离散化的值
int find(int x){//找到第一个大于等于x的位置int l=0, r=alls.size()-1;while(l<r){//在二进制表示法中:每往左边移一位,就是 ×2,每往右边移一位,就是 ÷2//等价于int mid = (l + r) / 2;int mid = l + r >> 1;//在左边if(x <= alls[mid]) r = mid;//在右边else l = mid + 1;}return 1;
}
具体例子帮助理解:
vector<int> alls = {2, 5, 7, 10, 15}; // 已经排好序、去重的数组
int x = 8; // 我们要找的是第一个大于等于 8 的值