给定一个大小为 n 的数组,找到数组众数。

阅读: 评论:0

给定一个大小为 n 的数组,找到数组众数。

给定一个大小为 n 的数组,找到数组众数。

方法一:
哈希表法通过管理一个哈希表来记录数组每一个元素出现的次数,然后遍历哈希表即可求出众数。

int majorityElement(vector<int>& nums)
{map<int, int> m_mapNums;for (int i = 0; i < nums.size(); i++){if (unt(nums[i])){m_mapNums[nums[i]]++;}else{m_mapNums.insert(pair<int, int>(nums[i],1));}}int m_iOutPos = 0;int m_iOut = 0;for (map<int, int>::iterator iter= m_mapNums.begin(); iter != d(); iter++){if (m_iOutPos < iter->second){m_iOutPos = iter->second;m_iOut = iter->first;}}return m_iOut;
}

方法二:
Boyer-Moore 投票算法,此方法是从官方题解中获得,其方法简单易懂且超过任一算法时间和空间复杂度,因此在此列出。
方法:维护一个记录器(记录当前数组段众数)和计数器(记录当前数组段众数与非众数差值),当计数器等于0时,记录器记录数组下一个数字,记做下一数组段的众数,遍历数组一遍即可得出整个数组众数。
示例:
数组 a=[1,2,3,4,5,6,7,4,3,3,3,2,1],求数组a的众数;
定义一个记录器num和计数器count,初始化num=a[0],即: num=1, count=1
则第一个数组段为[1,2],此时,count=0;
以此方法数组a被分为如下几段:
a=[1,2 | 3,4 | 5,6 | 7,4 | 3,3,3,2,1] num=3,count=1
每一个 “|” 处,计数器count都为0;

int majorityElement(vector<int>& nums)
{int m_iOutputNum = nums[0];int m_iOutputCounts = 1;for (int i = 1; i < nums.size(); i++){if (m_iOutputCounts > 0){if (m_iOutputNum == nums[i]){m_iOutputCounts++;}else{m_iOutputCounts--;}}else{m_iOutputNum = nums[i];m_iOutputCounts++;}}return m_iOutputNum;
}

本文发布于:2024-02-01 19:21:51,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678651038895.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数组   大小   众数
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23