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;//最终剩下的一定是多数元素阵营的,即多数元素,返回多数元素
}
相关推荐
梁辰兴9 小时前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
Lris-KK10 小时前
【Leetcode】高频SQL基础题--1731.每位经理的下属员工数量
sql·leetcode
野犬寒鸦10 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜10 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子10 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼11 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias21211 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_5704664111 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌11 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站11 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛