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;
    }
}

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

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


相关文章
|
9月前
|
人工智能
动态规划:小美的元素删除
动态规划:小美的元素删除
99 1
|
9月前
力扣2834. 找出美丽数组的最小和
力扣2834. 找出美丽数组的最小和
|
9月前
|
算法 测试技术 C语言
leecode算法题之数组
leecode算法题之数组
|
9月前
|
算法
每日一题——多数元素
每日一题——多数元素
|
9月前
|
算法
六六力扣刷题双指针之移除元素
六六力扣刷题双指针之移除元素
69 0
|
9月前
|
算法
六六力扣刷题数组之移除元素
六六力扣刷题数组之移除元素
60 0
|
搜索推荐 Java
Leecode912. 排序数组
Leecode912. 排序数组
65 0
|
存储 索引
【LeetCode】每日一题:移除元素
【LeetCode】每日一题:移除元素
117 0
|
算法 C++
【快乐手撕LeetCode题解系列】——移除链表元素
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【快乐手撕LeetCode题解系列】——移除链表元素~ 都是精华内容,可不要错过哟!!!😍😍😍
95 0
|
测试技术
Leetcode每日一题——“移除元素”
Leetcode每日一题——“移除元素”

热门文章

最新文章