• 离散化(一般写法uniqueunique+vector)


    离散化(一般写法uniqueunique+vector)

    • 将数据重新洗牌,并赋予数据新的位置下标。

    • 好处:

      有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。

      数据为什么离散化?(离散化的好处)

    • 题外:廖神讲的太好,怕日后遗忘,故做篇笔记,来整理一下离散化,加深印象。

    代码一(类双指针)

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e5+10;
    int main()
    {
    	int n,a[N],cnt=1;
    	cin>>n;
    	for(int i=0;i<n;i++)
    		cin>>a[i];
    		
    	sort(a,a+n);//方便去重
    	for(int i=1;i<n;i++)
    	{
    		if(a[i]!=a[i-1])//这里是为了完成去重,如果不同的话,就对原数组进行覆盖
    		   a[cnt++]=a[i];//覆盖,注意a[1]没有必要进行覆盖,因为a[1]本来就是最小的,本来就是符合要求的,所以cnt从1开始,而不用从0开始
    	}
    	for(int i=0;i<cnt;i++)
    	    cout<<a[i]<<" "; 
    	return 0;
    }
    

    代码二(unique

    • 顾名思义,独一无二

    unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序

    • unique()并非是能够直接对这个数组去重,而只是对范围内连续相同元素做去重处理,而不是起到整体去重。
    • unique()会将重复的元素扔到去重好后的数组后面,并返回第一个排好后第一个废弃元素的地址,并且通过与数组首地址的相减,我们可以得到新的数组长度。
    • 比如用unique去处理aabbaabb得到是abab,而不是ab
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int a[10]={1,1,2,3,4,5,7,7,10,6};
    	sort(a,a+10);
    	int t = unique(a,a+10)-a;//unique返回的是第一个废弃 
    	for(int i=0;i<t;i++)
    	   cout<<"a["<<i<<"] = "<<a[i]<<endl;
    	return 0;
    }
    

    代码三(unique+vector)

    • 借助vector的erase删掉多余的元素
    • 借助vector的size()直接获取不定数组的长度
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    
    	int a[10]={1,1,2,3,4,5,7,7,10,6};
    	sort(a,a+10);	
        vector<int > v(a,a+10);
        v.erase(unique(v.begin(),v.end()),v.end());
        int index = v.size();
        for(int i=0;i<index;i++)
           cout<<"a["<<i<<"] = "<<v[i]<<endl;
    	return 0;
    }
    

    参考

    [vector、 unique 、erase]

  • 相关阅读:
    开放6379端口
    synchronized 实现同步的基础
    pythoning—— 5:实战篇(购物车)
    pythoning ——3、数据类型(字符串)
    pythoning ——2、数据类型(元组、序列)
    pythoning ——1、基础篇
    暗链/黑链
    什么是webshell
    获取当前设备IP
    生成公钥
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15021566.html
Copyright © 2020-2023  润新知