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;//最终剩下的一定是多数元素阵营的,即多数元素,返回多数元素
}
相关推荐
吃着火锅x唱着歌1 分钟前
LeetCode 1190.反转每对括号间的子串
算法·leetcode·职场和发展
再难也得平4 分钟前
力扣238. 除自身以外数组的乘积(Java解法)
python·算法·leetcode
Mikowoo0078 分钟前
CPU_多线程操作图片_代码详解
算法
0 0 09 分钟前
CCF-CSP 38-2 机器人复健指南(jump)【C++】考点:BFS/DFS
开发语言·c++·算法·深度优先·宽度优先
小O的算法实验室9 分钟前
2025年IEEE TSMCS SCI1区TOP,面向异构多点动态聚合的多阶段粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
xiaoye-duck10 分钟前
《算法题讲解指南:优选算法-前缀和》--29.和为k的子数组,30.和可被k整除的子数组
c++·算法
Z9fish11 分钟前
sse 哈工大 C 语言编程练习 39
c语言·数据结构·算法
丶小鱼丶14 分钟前
数据结构和算法之【二分查找】
java·数据结构·算法
忡黑梨17 分钟前
BUUCTF_reverse_[MRCTF2020]Transform
c语言·开发语言·数据结构·python·算法·网络安全
枳颜21 分钟前
LeetCode 466:统计重复个数
数据结构·算法·字符串