力扣:多数元素

题目

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例

示例 1:

输入:nums = [3,2,3]

输出:3

示例 2:

输入:nums = [2,2,1,1,1,2,2]

输出:2

题解

java 复制代码
public static int majorityElement(int[] nums) {
   int count = 1;
    int candidate = nums[0];
    for (int i = 1; i < nums.length; i++) {
//            if (candidate == nums[i]) {
//                count++;
//            } else{
//                count--;
//            }
        count += candidate == nums[i] ? 1 : -1;
        if (count == 0) {
            candidate = nums[i];
            count = 1;
        }
    }
    return candidate;
}

可以将数组中不同的数都看成不同的团体(例如nums=[2,1,2],数组中有两种不同的数,就可以看成有两个团体)

每个团体都可以吸收符合自己团体的小弟(遇到相同的数),也可以派出自己的小弟去干掉不属于自己团队的其他团队的成员(遇到不同的数)。当吸收一个小弟时,团体人数就加一,当派出一个小弟时,团体人数就减一。

就这样遍历一遍数组,相当于每个让所有团队在一起打群架,每个成员的战力是相同的,每个成员都会他其他团队成员进行1v1男人大战最终同归于尽,最后还活着的团队就是人数最多的团队,也就是我们要找的众数。

时间复杂度:O(n)

空间复杂度:O(1)

相关推荐
q***51891 小时前
【语义分割】12个主流算法架构介绍、数据集推荐、总结、挑战和未来发展
算法·架构
Ghost-Silver1 小时前
《星火》——关于Deepseek的进化速度
笔记·算法
代码游侠5 小时前
日历的各种C语言实现方法
c语言·开发语言·学习·算法
春日见9 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊9 小时前
”回调“高级
算法·青少年编程
云里雾里!9 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子12 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue12 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈12 小时前
Python数据结构
数据结构·算法·排序算法
J***793913 小时前
后端在分布式系统中的数据分片
算法·哈希算法