• 离散化


    今天学校运动会,累了,不想写太多。。。

    感谢博客http://blog.csdn.net/doyouseeman/article/details/51154142

    正题

    一、何为离散化?

    有一个数组,数太大了,存不下。这时可以只储存数组中的每个数是第几大,节省大量空间和时间。

    注意:数组中可能会有相同的数

    比如:

    7
    1 10 -1 -1 0 10000 9999

    离散化后是:

    4 5 1 1 3 7 6

    明白了的话,接着往后看。

    二、离散化的基本方法

    将数组排序,记录每个数是第几大,然后再赋值。需要开第二个数组,而且写起来很麻烦。

    三、离散化黑科技

    建议下面的代码当模板背下来就好了,看不懂没关系:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n,a[1005],date[1005];
    
    void lsh(int *x)
    {
        int i;
        for(i=1;i<=n;i++) date[i]=a[i];
        sort(date+1,date+n+1);//排序是必须的 
        int r=unique(date+1,date+n+1)-date-1;//神奇的黑科技,针对date数组去重 
        for(i=1;i<=n;i++) a[i]=lower_bound(date+1,date+1+r,x[i])-date;
        //神奇的黑科技,找到a[i]在date中的位置并赋值 
    }
    int main()
    {
        int i;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        lsh(a);//对数组a进行离散化 
        for(i=1;i<=n;i++)
            printf("%d",a[i]);
        return 0;
    }
    离散化黑科技

    嗯,讲完了。

    ~祝大家编程顺利~

  • 相关阅读:
    SpringMvc的执行机制和环境搭建
    Flexbox,更优雅的布局
    Laravel框架 mysql 数据库 —— 基本使用
    在 Windows 上安装 Laravel 5.x
    javascript 中的借鸡生蛋
    由斐波那契数列所引发的性能优化
    成为一名优秀的Web前端开发者
    H5之contenteditable
    ionic 集锦
    vm10虚拟机安装Mac OS X10.10教程[转]
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/7612779.html
Copyright © 2020-2023  润新知