当前位置: 首页 > news >正文

leetCode-Majority Element

Description:
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

My Solution:

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        int len = nums.length;
        for(int i = 0;i < len;i++){
            map.put(Integer.valueOf(nums[i]),map.get(nums[i]) == null?Integer.valueOf(1):map.get(nums[i]) + 1);
        }
        int result  = 0;
        for(Integer i : map.keySet()){
            if(map.get(i) > Math.ceil(len/2)){
                result  = i;
            }
        }
        return result;
    }
}

Better Solution1:

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

这里写图片描述
如图所示,当数组nums元素个数为奇数时,如果Majority Element(最大数目元素,以下简称ME)最小,那么图中第一行数组中下划线即为ME在nums中的分布,如果Majority Element(最大数目元素,以下简称ME)最大,那么图中第一行数组中上划线即为ME在nums中的分布。当数组nums元素个数为偶数时,如果Majority Element(最大数目元素,以下简称ME)最小,那么图中第一行数组中下划线即为ME在nums中的分布,如果Majority Element(最大数目元素,以下简称ME)最大,那么图中第一行数组中上划线即为ME在nums中的分布。如果ME介于最大与最小之间,那么ME的分布介于两条直线之间。而无论何种情况,n2始终在ME的分布范围内。

Better Solution2:

class Solution {
    public int majorityElement(int[] nums) {
        int count = 0;
        Integer candidate = null;

        for (int num : nums) {
            if (count == 0) {
                candidate = num;
            }
            count += (num == candidate) ? 1 : -1;
        }

        return candidate;
    }
}

总结:因为ME满足个数大于num数组个数的一半,可以把nums数组想象成分布了两类元素,一类为ME,一类非ME,count始终大于0(实际不是这样,count一般会在大于0和等于0之间波动,不过这样想易于理解),而candidate就可以定位到ME。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/kevincong/p/7881344.html

相关文章:

  • linux bind 服务器同步,bind9.7 智能dns主从同步配置
  • nginx-php-fpm
  • linux打包解压工具,打包压缩、解压缩工具详解
  • linux邮件服务器安装与配置过程,Linux操作系统邮件服务器的搭建过程解析
  • Java提高十五:容器元素比较ComparableComparator深入分析
  • linux addr2line 用法,addr2line的用法
  • svn项目添加到tomcat后,tomcat无法打开问题解决
  • linux imq原理图,(linux内核IMQ源码实现分析.doc
  • rman从aix到linux跨平台恢复,利用RMAN跨平台迁移数据库
  • Linux权限分析
  • tcp连接超时断开linux,linux – FTP’ing大文件时如何防止TCP连接超时?
  • 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包
  • c语言二级指针的作用,C语言中二级指针的实例详解
  • c语言二叉搜索树程序,二叉搜索树 C语言实现
  • Baidu IoT Study
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Date型的使用
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES学习笔记(12)--Symbol
  • JavaScript中的对象个人分享
  • Node + FFmpeg 实现Canvas动画导出视频
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • ViewService——一种保证客户端与服务端同步的方法
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 翻译--Thinking in React
  • 基于遗传算法的优化问题求解
  • 技术发展面试
  • 聊聊sentinel的DegradeSlot
  • 中文输入法与React文本输入框的问题与解决方案
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ###C语言程序设计-----C语言学习(3)#
  • #if #elif #endif
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (2022 CVPR) Unbiased Teacher v2
  • (C++)八皇后问题
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分类)KNN算法- 参数调优
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三)mysql_MYSQL(三)
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (状压dp)uva 10817 Headmaster's Headache
  • **python多态
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 中 GetProcess 相关方法的性能
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [Android 13]Input系列--获取触摸窗口
  • [Angular] 笔记 21:@ViewChild
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce