leetcode:169. 多数元素(同归于尽消杀法)

一、题目:

函数原型:

int majorityElement(int* nums, int numsSize)

参数解释:

int *nums是一个指针,用于接收数组名

int numsSize是数组的元素个数
二、思路:

用同归于尽消杀法:

因为题目条件给出多数元素的个数大于总个数的50%,所以可以假设存在多个阵营,一个是多数元素的阵营,其他的则是非多数元素的阵营。

1.假设存在阵地,初始时无人占领,每次都会有一个阵营的士兵去争夺阵地

2.若阵地无人,则属于先到的士兵所属阵营;若阵营中有人,同阵营的则一起守阵地,守阵地人数增加,不同阵营的,则与其同归于尽,守阵地人数减少

3.由于多数元素的阵营的士兵大于其他阵营士兵的总和,因此所有士兵同归于尽后最后剩下的一定是多数元素阵营的士兵
三、代码:

cpp 复制代码
int majorityElement(int* nums, int numsSize){
    int result=0;
    int count=0;
    for(int i=0;i<numsSize;i++)
    {
        if(count==0)//判断阵地有无人
        {
            result=nums[i];
            count++;
        }
        else
        {
            if(nums[i]==result)//阵地有人,且是同阵营的
            {
                count++;//守阵地人数增加1
            }
            else//阵地有人,但是其他阵营的
            {
                count--;//与其同归于尽,守阵地人数减少1
            }
        }     
    }
    return result;//最终剩下的一定是多数元素阵营的,即多数元素,返回多数元素
}
相关推荐
ShiinaMashirol4 小时前
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
java·算法
wuqingshun3141596 小时前
蓝桥杯 5. 交换瓶子
数据结构·c++·算法·职场和发展·蓝桥杯
Demons_kirit6 小时前
Leetcode 2845 题解
算法·leetcode·职场和发展
adam_life7 小时前
http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire
算法·宽搜·布局唯一码
我想进大厂7 小时前
图论---朴素Prim(稠密图)
数据结构·c++·算法·图论
我想进大厂7 小时前
图论---Bellman-Ford算法
数据结构·c++·算法·图论
AIGC大时代7 小时前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
CODE_RabbitV8 小时前
【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
算法
宝耶9 小时前
面试常问问题:Java基础篇
java·面试·职场和发展
Wendy_robot9 小时前
【滑动窗口+哈希表/数组记录】Leetcode 438. 找到字符串中所有字母异位词
c++·算法·leetcode