C++ 离散化思想 及两个主要的注意点

(1)去重
(2)二分找位置

vector<int> alls; //存储所有待离散化的值
sort(alls.begin(), alls.end());//将所有值排序
alls.erase(unique(alls.begin(), alls.end()), alls.end());//去掉重复元素

int find(int x)//找到第一个大于等于x的位置
{
    int l = 0,r = alls.size() - 1;
    while (l < r)
    {
        int mid = l + r >> 1;
        if (alls[mid] >= x) r = mid;
        else l = mid + 1;
    }

    return r + 1;//映射到1,2,...n
}

应用之一是可以求区间和

你可能感兴趣的:(字符串,力扣,算法笔记,c++,算法,数据结构)