Leecode 169. 多数元素

简介: Leecode 169. 多数元素

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

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

示例 1:

输入: [3,2,3]

输出: 3

示例 2:

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

输出: 2

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/majority-element

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

第一种方法:排序后全部遍历法

一组数据中的众数,在这组数据是有序排列的前提下中间那一个必定是众数(众数唯一的情况下)

代码如下:

class Solution {
    public int majorityElement(int[] nums) {
    Arrays.sort(nums);
    return nums[nums.length / 2];
  }
}

自然,这种遍历全部的而言,不会是高效的方法

运行效率截图如下:

第二种方法:摩尔投票法:

核心就是对拼消耗。

玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。

那就大混战呗,最差所有人都联合起来对付你(对应你每次选择作为计数器的数都是众数),或者其他国家也会相互攻击(会选择其他数作为计数器的数),但是只要你们不要内斗,最后肯定你赢。

最后能剩下的必定是自己人。

class Solution {
    public int majorityElement(int[] nums) {
        int last=nums[0];
        int count=1;
        for (int i = 1; i < nums.length; i++) {
            if(nums[i]==last)   count++;
            else count--;
            if(count==0){
                i++;
                last=nums[i];
                count=1;
            }
        }
        return last;
    }
}

这种的运行效率截图如下:

很明显的第二种方法要高效很多


相关文章
|
8月前
|
机器学习/深度学习
【每日一题Day196】LC2106摘水果 | 枚举+前缀和数组 同向双指针+二分查找
【每日一题Day196】LC2106摘水果 | 枚举+前缀和数组 同向双指针+二分查找
64 0
|
20天前
|
人工智能 索引
leecode刷题 将有序数组转换为二叉搜索树
给定一个升序排列的整数数组 `nums`,要求将其转换为一棵高度平衡的二叉搜索树(BST)。通过递归方法,选择数组中间元素作为根节点,左半部分构建左子树,右半部分构建右子树。优化后的代码使用索引递归,避免了数组复制操作,提高了效率。
|
8月前
|
算法 测试技术 C++
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
|
8月前
|
算法 测试技术 C语言
leecode算法题之数组
leecode算法题之数组
|
8月前
Leecode之反转链表
Leecode之反转链表
|
8月前
|
算法
每日一题——多数元素
每日一题——多数元素
Leecode 5. 最长回文子串
Leecode 5. 最长回文子串
52 1
|
搜索推荐 Java
Leecode912. 排序数组
Leecode912. 排序数组
61 0
Leecode206 反转链表
Leecode206 反转链表
49 0
Leecode10.01 合并排序数组
Leecode10.01 合并排序数组
65 0