zoukankan      html  css  js  c++  java
  • 数据的离散化

    使用STL算法离散化:
    思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。
    假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[1005];
    int main(){
        int size,x=1,n;//离散后数组大小 
        scanf("%d",&n);
        for(int i=0;i<n;i++)scanf("%d",a+i);
        sort(a,a+n);size=unique(a,a+n)-a;//排序+去重 
        scanf("%d",&x);
        int find=lower_bound(a,a+n,x)-a;//用的时候加个lower_bound就行了 
        printf("%d",find);
        return 0;
    } 

    unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

  • 相关阅读:
    C++ 重载运算符
    线段树
    矩阵的构造
    矩阵快速幂
    Fibnoccia 数列简单题
    权值线段树
    .net System.Net.Mail 之用SmtpClient发送邮件Demo
    poj-3087 Shuffle'm Up
    hdu-1548 A strange lift
    scu-4440 rectangle (非原创)
  • 原文地址:https://www.cnblogs.com/bennettz/p/6737051.html
Copyright © 2011-2022 走看看