21xrx.com
2024-12-22 21:01:55 Sunday
登录
文章检索 我的文章 写文章
C++求众数
2023-06-28 12:49:03 深夜i     --     --
C++ 求众数 数组 哈希表 暴力算法

C++是一种广泛应用于计算机科学领域的编程语言,也是学习数据结构与算法的必备语言之一。对于算法的学习,求解众数是一个常见的问题,本文将探讨如何使用C++求众数。

什么是众数?

在数学和统计学中,众数是指在一组数据中出现次数最多的数值。以1,2,2,2,3,4,5为例,2是出现次数最多的数值,因此2是这一组数据的众数。

使用C++求众数的方法

使用C++求众数的方法主要分为两类:暴力枚举和哈希表。

暴力枚举法

暴力枚举法是最笨的方法,它的基本思想是通过遍历这一组数据,找出出现次数最多的数值。该方法的时间复杂度为O(n^2)。

代码示例:

//暴力枚举法求众数

int mode(vector & nums) {

  int mode = 0;

  int cnt = 0;

  for (int i = 0; i < nums.size(); i++) {

    int cur = nums[i];

    int cur_cnt = 0;

    for (int j = 0; j < nums.size(); j++) {

      if (nums[j] == cur) {

        cur_cnt++;

      }

    }

    if (cur_cnt > cnt)

      mode = cur;

      cnt = cur_cnt;

  }

  return mode;

}

哈希表法

哈希表法是一种高效的方法,它的基本思想是通过存储每个数字出现的次数,然后找到出现次数最多的数字。该方法的时间复杂度为O(n)。

代码示例:

//哈希表法求众数

int mode(vector & nums) {

  unordered_map mp;

  int mode = 0;

  int cnt = 0;

  for (int num : nums) {

    mp[num]++;

    if (mp[num] > cnt) {

      mode = num;

      cnt = mp[num];

    }

  }

  return mode;

}

总结

本文主要介绍了使用C++求众数的方法,包括暴力枚举法和哈希表法。其中,哈希表法是一种高效的方法,通过使用unordered_map存储每个数字出现的次数,能够在O(n)的时间复杂度内求出众数。当然,在实际应用中,还需要根据数据量和计算效率等因素,选择合适的求解方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复