最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • leetcode每日一题系列-主要元素

    正文概述 掘金(saberlgy)   2021-07-09   495

    leetcode-面试17.10-主要元素

    [博客链接]

    菜?的学习之路

    掘金首页

    [题目描述

    数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1
    ) 的解决方案。 
    
    
    
     示例 1: 
    
    
    输入:[1,2,5,9,5,9,5,5,5]
    输出:5 
    
     示例 2: 
    
    
    输入:[3,2]
    输出:-1 
    
     示例 3: 
    
    
    输入:[2,2,1,1,1,2,2]
    输出:2 
     Related Topics 数组 计数 
     ? 100 ? 0
    
    

    [题目链接]

    leetcode题目链接

    [github地址]

    代码链接

    [思路介绍]

    思路一:Boyer-Moore投票算法

    • 暴力法
    • 通过map存储每个元素的信息,然后通过value 判断数组中占比超过一半的元素元素即可
    • 时间复杂度O(n) 空间复杂度O(n)
    • 这种方法就不写了,太简单了
    • Boyer-Moore投票算法这也是我第一次听说这个算法
    • 整体思路类似于随机确立一个候选元素
    • 每当遍历一个元素与当前元素相同则计数器count+1,不同则count-1
    • 当count=0的时候遍历下一个元素,将候选元素变为下一个元素
    • 重复上述过程
    • 证明原理,因为只要元素的定义是超过数组一半数量元素
    • 所以这种做法一定会抵消其余元素
    • 剩余的元素可能是主要元素
    • 需要再次扫描数组,确认主要元素的数量是否超过数组的一半
    public int majorityElement(int[] nums) {
                int count = 1, master = nums[0], n = nums.length;
                if (n == 1) {
                    return master;
                }
                for (int i = 1; i < n; i++) {
                    if (count == 0) {
                        master = nums[i];
                    }
                    if (nums[i] == master) {
                        count++;
                    } else {
                        count--;
                    }
                }
                count = 0;
                for (int num : nums
                ) {
                    if (num == master) {
                        count++;
                    }
                }
        //确保奇数个元素的一半长度
                return count >= (n + 1) / 2 ? master : -1;
            }
    

    时间复杂度O(n)空间复杂度O(1)时间复杂度O(n) 空间复杂度O(1)时间复杂度O(n)空间复杂度O(1)


    起源地下载网 » leetcode每日一题系列-主要元素

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元