算法题每日一练---第98天:多数元素

608 阅读1分钟

一、问题描述

给定一个大小为 n 的数组 nums ,返回其中的多数元素。

多数元素是指在数组中出现次数大于⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素

题目链接:多数元素

二、题目要求

样例 1

输入: nums = [3,2,3]
输出: 3

样例 2

输入: nums = [2,2,1,1,1,2,2]
输出: 2

考察

1.哈希表、简单模拟
2.建议用时10~25min

三、问题分析

这也是一道比较简单的模拟问题,只不过要用到哈希表的相关知识点,对于考察考察哈希表计数的题目,之前我写过一篇三种哈希方法解决元素重复问题的文章,大家可以先去看看下面这一篇文章:

算法题每日一练---第77天:存在重复元素

我们先分析一下题目,首先题目要求我们求出元素出现频率>n/2的元素。

对于这一题,次数要求大于数组一半的长度(不为空),那么可以就可以确定元素的唯一性,只要我们找到这个数字,就不需要向下遍历了,直接输出结果就行。

对于数字出现的次数问题,我们先遍历数组元素,通过哈希表map计数,每次计数后判断一下:次数是否达到要求

凭借这波分析,问题基本拿捏!

23.png

四、编码实现

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int i,n=nums.size();//初始化
        map<int,int>m;//map计数
        for(i=0;i<n;i++)//循环判断
        {
            m[nums[i]]++;//计数
            if(m[nums[i]]>n/2)//满足条件
                return nums[i];  
        }
        return 0;
    }
};

五、测试结果

1.png

2.png