[经典面试题]169. 多数元素

简介: [经典面试题]169. 多数元素

题目描述

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

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

输出:3

示例 2:

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

输出:2

解题方法分析:

使用哈希算法(HashMap)来存储每个元素以及出现的次数。通过求解哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数,统计出数组出现的数字次数最多的那一过。

首先循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键,这样就可以通过哈希统计出出现次数最多的数字。

代码:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        // 使用map来记录每个数字的出现次数
        std::map<int, int> counts;
        // majority用于记录当前的多数元素,cnt用于记录多数元素出现的次数
        int majority = 0, cnt = 0;
        // 遍历输入数组
        for (int num : nums) {
            // 将当前数字的出现次数加一
            ++counts[num];
            // 如果当前数字的出现次数超过之前记录的多数元素的次数
            if (counts[num] > cnt) {
                // 更新多数元素和出现次数
                majority = num;
                cnt = counts[num];
            }
        }
 
        // 返回最终找到的多数元素
        return majority;
    }
};


相关文章
|
3月前
|
NoSQL Redis 数据库
面试02-Redis 中的过期元素是如何被处理的?
面试02-Redis 中的过期元素是如何被处理的?
58 0
|
4月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
43 0
|
4月前
|
Java C++
面试题 17.10. 主要元素(C++)
面试题 17.10. 主要元素(C++)
13 0
|
4月前
|
前端开发 Java C++
面试官:用 CSS 实现一个元素的水平垂直居中,写出你能想到的所有答案
面试官:用 CSS 实现一个元素的水平垂直居中,写出你能想到的所有答案
|
9月前
|
算法
LeetCode150道面试经典题-移除元素(简单)
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度
37 0
|
7月前
|
算法 Go C++
【面试必刷TOP101】 删除有序链表中重复的元素-I & 删除有序链表中重复的元素-II
【面试必刷TOP101】 删除有序链表中重复的元素-I & 删除有序链表中重复的元素-II
30 0
|
9月前
|
JavaScript
热点面试题:JS 如何判断一个元素是否在可视区域内?
热点面试题:JS 如何判断一个元素是否在可视区域内?
|
12月前
|
算法 C++
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
|
小程序 Java 程序员
面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!
面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!
105 0
|
安全 小程序 Java
面试官:怎么删除 HashMap 中的元素?我一行代码搞定,赶紧拿去用!
面试官:怎么删除 HashMap 中的元素?我一行代码搞定,赶紧拿去用!
185 0