C ++中具有最大不同元素的子序列数
给我们一个仅包含整数的数组arr []。目的是找到arr []的子序列数,以使它们具有最大数量的不同元素。如果数组为[4,1,2,3,4],则两个子序列将为[4,1,2,3]和[1,2,3,4]。
让我们用例子来理解
输入− arr [] = {1,3,5,4,2,3,1}
输出-具有最大不同元素的子序列数为-4
说明-最大不同元素是1,2,3,4和5。计数是5。子序列将是-
[1,3,5,4,2],[3,5,4,2,1],[5,4,2,3,1],[1,5,4,2,3]。
输入− arr [] = {5,4,2,1,3}
输出-具有最大不同元素的子序列数为-1
说明-所有元素都是不同的。子序列数将为1。
以下程序中使用的方法如下
在这种方法中,我们将基于以下事实找到子序列:如果所有元素都不同,则子序列的数量为1,即数组本身。如果存在重复的元素,则每个重复的元素将成为新子序列的一部分。因此,我们将创建一个不同元素的频率的unordered_map。然后将每个频率乘以该频率进行计数。最后,计数具有频率总数。
以整数数组arr []作为输入。
函数Max_distinct_subseq(int arr [],int size)获取数组及其大小,并返回具有最大不同元素的子序列的计数。
假设所有元素都是唯一的,则将初始计数设为1,则数组本身是具有最大不同元素的子序列。
创建unordered_map <int,int>哈希值;存储所有不同元素的频率。
使用for循环遍历数组,并使用hash [arr [i]]] ++更新每个元素arr [i]的频率。
现在,使用for循环遍历哈希。对于每个频率,它-> second(it = iterator)乘以先前的计数。由于同一时间的x个元素将成为x个不同子序列的一部分。
最后,计数具有频率总数。
返回计数作为结果。
示例
#include <bits/stdc++.h>using namespace std;
int Max_distinct_subseq(int arr[], int size){
int count = 1;
unordered_map<int, int> hash;
for (int i = 0; i < size; i++){
hash[arr[i]]++;
}
for (auto it = hash.begin(); it != hash.end(); it++){
count = count * (it->second);
}
return count;
}
int main(){
int arr[] = { 3, 7, 3, 3, 1, 5, 6, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of subsequences having maximum distinct elements are: "<<Max_distinct_subseq(arr, size);
return 0;
}
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of subsequences having maximum distinct elements are: 3
以上是 C ++中具有最大不同元素的子序列数 的全部内容, 来源链接: utcz.com/z/340770.html