算法笔记12:数组去重

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n+1];//放置索引越界,数组大一些
    int tmp[n+1];// 定义一个和a相同大小的数组,存放去重后的数
    for(int i=0;i<n;++i)
        cin>>a[i];//依次输入数组a
    int m = 0; // 记录当前tmp到底存了多少个元素
    for (int k = 0; k < n; ++k)
    {
        int j = 0;//放外面的作用是下面if要用
        for (; j < m; j++)//可以省略j=0
        {
            if (a[k] == tmp[j])//拿a[i]依次与tmp里的元素对比
                break; // 找到相同的了就break
        }
        if (j == m)//这个意思是数组b内的数据与当前位置的a数组里面的数据不一样
        { // 没有找到一个相同的,把a中此元素放入tmp里
            tmp[m] = a[k];
            m++;
        }
    }
    for (int ii = 0; ii < m; ii++)
    {
        cout << tmp[ii] << " ";//输出
    }
    return 0;
}

        数组去重,temp数组负责保存去重后的数据,外循环k用来移动未去重前的a[]数组下标,内循环j用来遍历temp数组,与a数组进行对比。j的限制就是temp当前有的元素。break是跳过当前的j循环,如果没有相同的就把a元素放入temp中

还有一种

#include<iostream>
#include <algorithm>//算法头文件,sort包含在内
using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[n+1];
    for(int i=0;i<n;++i)
        cin>>a[i];
    sort( a, a + n);  // 排序
    int m=unique(a, a +n) - a;//去重复
    for (int i = 0; i < m; i++)
        cout << a[i] << " ";//输出
    return 0;
}

        利用C++自带的排序和取重函数sort和unique,#include <algorithm>//算法头文件

        unique是STL中的函数,需要#include<algorithm>

        unique的作用是“去掉”容器中相邻元素的重复元素,它会把重复的元素添加到容器末尾,而返回值是去重之后的尾地址

int num[10]={1,1,2,2,2,3,4,5,5,5};

int ans=unique(num,num+10)-num;

        这时,返回的ans是5,而num中前5项就是1,2,3,4,5,一般使用前需要对容器进行排序。

上一篇:C++多线程编程第六讲--unique_lock详解


下一篇:我踩过的Django的坑