算法(19)-merge去重-两个整形有序数组 –C++

 比链表的合并去重更容易实现。直接上代码,供各位参考。
 去重方法:1.用vector<int > vc保存新数组值时:对于有序数组, 新加的数!=数组的最后一个数
                   2.用set<int>intset;保存自然去重
1.vector

//合并两个有序数组
//void mergeTwoarr(int arr1[], int arr2[])
int arr1[9] = { 1,2,3,4,5, 5, 6, 6, 7 };
int arr2[11] = { 2,3, 4, 4, 5, 6, 8, 8, 9, 10, 11 };
void mergeTwoarr(int arr1[], int arr2[])
{   
//  int num[] = { 0,1,2,3,4,5,6,7,8,9,10 };
//  int len = sizeof(num) / sizeof(num[0]);

    printArr(arr1,9);
    cout<<"**********************"<<endl;
    printArr(arr2,11);
    int i = 0, j = 0;
    int len1 = 9;
    int len2 = 11;
    vector <int> vrc;

    while (i < len1 && j < len2) 
    {
        if (arr1[i] < arr2[j])
        {
            //vrc不可为空,len-1会越界
            //去重:最后一个数与添加的数不同
            int vrclen = vrc.size();
            if (vrclen ==0 || vrc[vrclen - 1] !=arr1[i])
            {
                vrc.push_back(arr1[i]);
            }
            //注意不管有没有重复都会++;j同理
            i++;
        }
        else 
        {
            int vrclen = vrc.size();
            if (vrclen == 0|| vrc[vrclen - 1] != arr2[i])
            {
                vrc.push_back(arr2[j]);
            }
            j++;
        }
    }
    //arr1多出来的
    while (i < len1) 
    {
        int vrclen = vrc.size();
        if (vrclen == 0 || vrc[vrclen - 1] != arr1[i])
        {
            vrc.push_back(arr1[i]);
        }
        i++;
    }
    //arr2多出来的
    while (j < len2)
    {
        int vrclen = vrc.size();
        if (vrclen == 0 || vrc[vrclen - 1] != arr2[i]) 
        {
            vrc.push_back(arr2[j]);
        }
        j++;
    }
    cout << "it****************" << endl;
    for (int i = 0; i < vrc.size(); i++)
    {
        cout <<"vrc[i]=" <<vrc[i] << endl;
    }
    cout << "it****************" << endl;
    for (auto it = vrc.begin(); it != vrc.end(); it++)
    {
        cout<<*it<<endl;
    }
}

2.set
 

void mergeTwoarrSet(int arr1[], int arr2[])
{
    //  int num[] = { 0,1,2,3,4,5,6,7,8,9,10 };
    //  int len = sizeof(num) / sizeof(num[0]);

    printArr(arr1, 9);
    cout << "**********************" << endl;
    printArr(arr2, 11);
    int i = 0, j = 0;
    int len1 = 9;
    int len2 = 11;

    set<int>intset;

    while (i < len1 && j < len2)
    {
        if (arr1[i] < arr2[j])
        {
            intset.insert(arr1[i]);
            i++;
        }           
        else
        {
            intset.insert(arr2[i]);
            j++;
        }
    }
    //arr1多出来的
    while (i < len1)
    {
        intset.insert(arr1[i]);
        i++;
    }
    //arr2多出来的
    while (j < len2)
    {
        intset.insert(arr2[j]);
        j++;
    }
    cout << "it****************" << endl;

    for (auto it = intset.begin(); it != intset.end(); it++)
    {
        cout << *it << endl;
    }
}

 

原文链接: https://www.cnblogs.com/jasmineTang/p/14369295.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    算法(19)-merge去重-两个整形有序数组 --C++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327703

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:22
下一篇 2023年3月1日 下午4:23

相关推荐