给你一个包含 N 个元素的数组(可能不同)。检查每个元素的频率并按每个元素的频率降序打印元素。如果两个元素具有相同的频率,则首先打印较大的值。
例如:-
N=5 ar[] = {1,2,2,1,6}
元素的频率是:-
1 - 2 次 2 - 2 次 6 - 1 次
现在按频率降序打印元素。因此输出是:- {2,1,6} 因为 2 大于 1 并且两者具有相同的频率,所以更大的值即 2 首先打印。
我没有得到问题的优化逻辑。请帮忙
给你一个包含 N 个元素的数组(可能不同)。检查每个元素的频率并按每个元素的频率降序打印元素。如果两个元素具有相同的频率,则首先打印较大的值。
例如:-
N=5 ar[] = {1,2,2,1,6}
元素的频率是:-
1 - 2 次 2 - 2 次 6 - 1 次
现在按频率降序打印元素。因此输出是:- {2,1,6} 因为 2 大于 1 并且两者具有相同的频率,所以更大的值即 2 首先打印。
我没有得到问题的优化逻辑。请帮忙
由于您是按照频率的降序对向量进行排序,我猜您错过了等频条件。显然,正常排序将保留频率向量/列表中重复元素的自然顺序。
您需要首先检查两个频率是否相等。如果相等,则按它们的键排序。
示例:frequency list={3(2),3(1),3(5),1(9)}
然后自然降序排序将是:({2,1,5,9}或{1,2,5,9}取决于实现)。但是你需要{5,2,1,9}. 因此,我们将排序函数修改如下:
sort(v.begin(),v.end(),[](const pair<int,int> a, const pair<int,int>b) {
if (a.second == b.second) {
return a.first > b.first;
}else{
return a.second > b.second;
}
});