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;//最终剩下的一定是多数元素阵营的,即多数元素,返回多数元素
}
相关推荐
on_pluto_4 分钟前
GAN生成对抗网络学习-例子:生成逼真手写数字图
人工智能·深度学习·神经网络·学习·算法·机器学习·生成对抗网络
Q741_14717 分钟前
C++ 分治 快速排序优化 三指针快排 力扣 面试题 17.14. 最小K个数 题解 每日一题
c++·算法·leetcode·快排·topk问题
学学学无无止境17 分钟前
将有序数组转换为二叉搜索树-力扣
leetcode
sun༒18 分钟前
递归经典例题
java·算法
Lear23 分钟前
【数组】代码随想录 44.开发商购买土地
算法
CoovallyAIHub29 分钟前
OmniNWM:突破自动驾驶世界模型三大瓶颈,全景多模态仿真新标杆(附代码地址)
深度学习·算法·计算机视觉
TU^1 小时前
C语言习题~day27
c语言·数据结构·算法
2401_841495641 小时前
【自然语言处理】Transformer模型
人工智能·python·深度学习·算法·语言模型·自然语言处理·transformer
孤廖1 小时前
面试官问 Linux 编译调试?gcc 编译流程 + gdb 断点调试 + git 版本控制,连 Makefile 都标好了
linux·服务器·c++·人工智能·git·算法·github
Zero不爱吃饭2 小时前
将有序数组转换为二叉搜索树
数据结构·算法