原文:
给定一个arr[]
,该数组由n
个整数组成,任务是从该数组中打印出所有相邻的整数对,这些对在给定数组中出现多次 。 如果数组包含多个这样的对,请按排序顺序打印所有对。
示例:
输入:
arr[] = {1, 2, 5, 1, 2}
输出:
1 2
说明:
1 2
是数组中唯一重复的整数对。输入:
arr[] = {1, 2, 3, 4, 1, 2, 3, 4, 1, 2}
输出:
1 2 2 3 3 4 4 1
说明:
由于数组具有多个重复对,因此所有对均按排序顺序打印。
方法:最简单的方法是遍历数组并将每个相邻对存储在中。 打印频率大于1
的所有此类对。 请按照以下步骤解决问题:
-
创建一个映射
m
以将所有相邻对存储在数组中。 -
遍历给定数组并将每个相邻对存储在
map m
中。 -
完成上述步骤后,,如果任意一对频率至少为一个,则将其插入向量
v
中。 -
,并打印存储在其中的所有对。
下面是上述方法的实现:
c
// c program for the above approach
#include
using namespace std;
// function to print adjacent pairs
// in sorted order
void repeated_pairs(int arr[], int n)
{
// store the frequency of all
// the adjacent pairs
map, int> m;
// stores the resultant pairs
vector > v;
int i, j;
// stores the count of all
// adjacent pairs
for (i = 0; i < n - 1; i ) {
pair p
= { arr[i], arr[i 1] };
// increment the count of pair
m[p] ;
}
// store pairs that appears more
// than once
for (auto i = m.begin();
i != m.end(); i ) {
// if frequency is at least 1
if (i->second > 1) {
pair p = i->first;
// insert pair into vector
v.push_back(p);
}
}
// sort the vector
sort(v.begin(), v.end());
// print the pairs
for (i = 0; i < v.size(); i ) {
pair p = v[i];
// print the pair
cout << p.first << " "
<< p.second << endl;
}
}
// driver code
int main()
{
// given arr[]
int arr[] = { 1, 2, 3, 4, 1,
2, 3, 4, 1, 2 };
int n = sizeof(arr) / sizeof(arr[0]);
// function call
repeated_pairs(arr, n);
return 0;
}
输出:
1 2
2 3
3 4
4 1
时间复杂度:o(n * log n)
。
辅助空间:o(n)
。
麻将胡了pg电子网站的版权属于:月萌api www.moonapi.com,转载请注明出处