【问题标题】:Find highest frequent element (the smallest one if possible) and its occurrences in integer array查找频率最高的元素(如果可能的话,最小的)及其在整数数组中的出现次数
【发布时间】:2020-03-21 18:58:52
【问题描述】:

问题:找到 2 个东西

  • 给定的未排序整数数组中的最高出现次数
  • 出现率最高的元素如果多个元素满足出现率最高的相同) 结果是最小的元素。

请尽可能简单地解决问题,不要使用指针或任何高级容器,如 hashtable、pair 或 map(我是初学者)

例如:

{1, 2, 8, 2, 5, 0, 5}

答案是 2 和 2(元素 25 都出现两次,但 2 是最小的)

这里是代码,但它只找到最高出现的权利。

int A[] = {1, 2, 8, 2, 5, 0, 5};
int N = 7;
    int maxCount = 0;
    int minMode = 0;
    for (int i = 0; i <= N - 1; i++) {
           int count = 0;
           for (int j = 0; j <= N - 1; j++) {
             if (A[i] == A[j])
                 count++;
       }
      if (count >= maxCount)
        {
            maxCount = count;
            minMode = A[i];
        }

     }
        cout << maxCount << " " << minMode << endl;

【问题讨论】:

  • 使用地图并不是真正的“高级”,而是使用std::map 使其尽可能简单。
  • 我们这里有点语言问题:“出现次数最多”和“出现次数最多的元素”有什么区别?
  • @idclev 显然,这是某种家庭作业或测试,其中包含此要求是为了确保所有参与者都在平等的基础上进行游戏,并且他们确实了解如何解决问题无需使用一些现成的工具,这些工具会在他们不了解其工作原理的情况下通过魔术为他们完成所有工作。
  • @MikeNakis 这就是猜测。 OP 明确指出要避免使用地图,因为他们认为它是“高级的”并且想要一个“简单”的解决方案。这个前提是错误的,因为使用地图 很简单。如果这是一个硬性要求,则应在问题中说明
  • @MikeNakis 非常感谢,但你能建议编辑一下吗?

标签: c++ arrays algorithm integer find-occurrences


【解决方案1】:

这个问题是 O(n),但是不使用结构,它变成了 O(n²)。

这是一个简单的 O(n²) 解决方案:

int main(){    
    int A[7] = {1, 2, 8, 2, 5, 0, 5};
    int value, occurrences;
    int maxValue = 99999999, maxOccurrences = 0;
    for(int i = 0; i < 7; i++){
        value = A[i]; occurrences = 0;
        for(int j = 0; j < 7; j++) if(A[j] == value) occurrences++;
        if(occurrences > maxOccurrences){
            maxValue = value; maxOccurrences = occurrences;
        }
        else if(occurrences == maxOccurrences){
            if(value < maxValue) {
                maxValue = value; 
                maxOccurrences = occurrences; 
            }
        }       
    }
    cout<<maxValue<<" occurs "<<maxOccurrences<<" times"<<endl;
}

我们将 maxValue 初始化为一个非常大的数字,只是为了帮助这样一个事实,即如果两个数字出现相同的次数,则会选择最低的。

然后我们只是迭代和计数。

一个可能的优化是:假设您在数组中搜索 5。总是找到 5,将出现次数添加到数量并将数组值设置为 -1,所以当你最终从它开始时,你知道它是 -1,你可以跳过那个元素。

【讨论】:

  • 但是为什么 maxValue 被初始化为一个很大的值
  • 因为它更容易存储最小值。您可以从任何值开始,这没什么大不了的。
猜你喜欢
  • 2021-02-27
  • 1970-01-01
  • 2019-08-15
  • 2021-12-11
  • 2017-07-18
  • 2011-09-09
  • 2013-06-22
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多