【LeetCode 面试经典150题】169. Majority Element 多数元素

169. Majority Element

题目大意

Given an array nums of size n, return the majority element.

The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.

中文释义

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

多数元素是指在数组中出现次数超过 ⌊n / 2⌋ 的元素。你可以假设数组中总是存在多数元素。

示例

Example 1:

  • Input: nums = [3,2,3]
  • Output: 3

Example 2:

  • Input: nums = [2,2,1,1,1,2,2]
  • Output: 2

Constraints:

  • n == nums.length
  • 1 <= n <= 5 * 10^4
  • -10^9 <= nums[i] <= 10^9

解题思路

算法描述 - 摩尔投票法

使用了摩尔投票法来找到数组中的多数元素。多数元素定义为在数组中出现次数超过数组长度一半的元素。

  1. 初始化变量:

    • candidate: 作为多数元素的候选,初始设为数组的第一个元素。
    • cnt: 记录候选元素的"积分",初始设为1,代表候选元素的初始积分。
  2. 遍历数组 - 应用摩尔投票法:

    • 从数组的第二个元素开始遍历。
    • 摩尔投票法的核心在于配对不同的元素并消除它们。具体实现为:
      • 如果 cnt 为0,说明之前的候选元素和其他元素已经完全抵消,因此需要选取当前元素作为新的候选元素,并重置 cnt 为1。
      • 在遍历过程中,如果当前元素与候选元素相同,cnt 加1(增加积分);如果不同,则 cnt 减1(减少积分)。
  3. 返回结果:

    • 遍历完成后,由于多数元素的数量超过数组长度的一半,所以最终剩下的 candidate 即为所求的多数元素。
cpp 复制代码
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int candidate = nums[0], cnt = 1;
        for (int i = 1; i < nums.size(); i++) {
            if (cnt == 0) {
                candidate = nums[i];
                cnt = 1;
            } else {
                cnt = candidate == nums[i] ? cnt + 1 : cnt - 1;
            }
        }
        return candidate;
    }
};
相关推荐
gfdhy1 天前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
Warren981 天前
Python自动化测试全栈面试
服务器·网络·数据库·mysql·ubuntu·面试·职场和发展
百***06011 天前
SpringMVC 请求参数接收
前端·javascript·算法
一个不知名程序员www1 天前
算法学习入门---vector(C++)
c++·算法
云飞云共享云桌面1 天前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张1 天前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
橘颂TA1 天前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
Dream it possible!1 天前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树的最小绝对差(85_530_C++_简单)
c++·leetcode·面试
xxxxxxllllllshi1 天前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L1 天前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先