力扣:多数元素

题目

给定一个大小为 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)

相关推荐
Boop_wu2 小时前
[Java EE] 多线程 -- 初阶(1)
java·jvm·算法
陌路202 小时前
Linux33 网络编程-多线程TCP并发
网络·算法
星释9 小时前
Rust 练习册 :Pythagorean Triplet与数学算法
开发语言·算法·rust
星释9 小时前
Rust 练习册 :Nth Prime与素数算法
开发语言·算法·rust
多喝开水少熬夜10 小时前
Trie树相关算法题java实现
java·开发语言·算法
WBluuue10 小时前
数据结构与算法:树上倍增与LCA
数据结构·c++·算法
bruk_spp11 小时前
牛客网华为在线编程题
算法
黑屋里的马13 小时前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
sin_hielo13 小时前
leetcode 1611
算法·leetcode