计算数组中的对,使得 C++ 中一个的频率至少是另一个的值
我们得到一个正整数数组。目标是找到arr[]元素对的计数,使得元素对具有元素(A,B),其中A的频率是B次,B的频率是A。
让我们通过例子来理解。
输入-intarr[]={3,3,3,5,5,6,6}
输出-数组中对的计数,使得一个的频率至少是另一个的值-1
说明-数组中A出现B次且B出现A次的有效对是(3,3),因为3在数组中出现3次。所以只有一对有效,因此计数为1。
输入-intarr[]={3,3,3,3,3,5,5,5,6,6}
输出-数组中对的计数,使得一个的频率至少是另一个的值-1
说明-数组中A出现B次且B出现A次的有效对是(3,3),(5,5)和(3,5)因为3出现5次,5出现3次大批。所以有三个有效对,因此计数为3。
下面程序中使用的方法如下
在该方法中,我们首先创建并填充一个包含数组元素频率的无序映射。使用for循环遍历unordered_map。对于每个元素及其频率,如果发现更多频率,则增加对的计数。
取一个整数数组arr[]。
函数frequency_other_value(intarr[],intsize)获取数组及其大小并返回对的计数,使得对是(A,B)其中A至少出现B次,反之亦然。
取初始计数为0。
对arr[]的元素及其频率取unordered_map
使用for和for每对start=it.second的第一个值遍历映射;(it=iterator),遍历频率>=开始使用for循环的映射。
此类对的增量计数。
返回计数作为结果。
示例
#includeusing namespace std; int frequency_other_value(int arr[], int len){ int count = 0; unordered_map um; for (int i = 0; i < len; ++i){ um[arr[i]]++; } for (auto it : um){ int start = it.first; int end = it.second; for (int j = 1; j <= end; j++){ if (um[j] >= start){ count++; } } } return count; } int main(){ int arr[] = { 3, 3, 3, 5, 5, 6, 6}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"数组中对的计数使得一个的频率至少是另一个的值是: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
数组中对的计数使得一个的频率至少是另一个的值是: 1