栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【剑指Offer】39.数组中出现次数超过一半的数字

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指Offer】39.数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字 题目

 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

思路

 我们使用哈希映射(HashMap)来存储每一个元素以及出现的次数。对于哈希映射中的每一个键值对,键表示一个元素,值表示该元素出现的次数。
我们使用一个循环遍历数组nums并将数组中的每一个元素加入哈希映射中,在这之后,我们遍历哈希映射中的所有键值对,返回最大的键。我们同样也可以在遍历数组Nums时候使用打擂台的方法,维护最大值,这样就不用遍历哈希表。

代码
class Solution {
public:
    int majorityElement(vector& nums) {
        unordered_map counts;// 定义一个哈希表
        int majority = 0, cnt = 0;// cnt代表最大次数 初始化0   Majority表示出现次数最多的数字

        for(int num:nums){
            // 统计每一种数字出现的次数
            ++counts[num];// 该数字出现的次数 + 1
            if(counts[num] > cnt)
            {
                majority = num;// 表示 次数超过一半的数字
                cnt = counts[num]; // 记录下最大次数
            }
        }
        return majority; 
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号