算法(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;
}
}

浙公网安备 33010602011771号