【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;
    }
};
相关推荐
ZhengEnCi8 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David9 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi9 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_6189 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang9 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_9707038311 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你021411 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi12 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
每天进步一点点km12 小时前
自用-牛客网-华为机试编程模拟题1-python
华为od·华为·面试
Flynn Liang12 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai