前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >169.多数元素

169.多数元素

作者头像
名字是乱打的
发布2021-12-23 19:02:59
2010
发布2021-12-23 19:02:59
举报
文章被收录于专栏:软件工程软件工程

题目:

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ? n/2 ? 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。

代码语言:javascript
复制
示例 1:
输入:[3,2,3]
输出:3

示例 2:
输入:[2,2,1,1,1,2,2]
输出:2

进阶:
尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

思路:

  • 我把思路叫守阵地法
  • 假设每个不同的数字都是一个部队,然后这个数字部队遇到自己人进行阵营人数++,遇到敌人就自爆带走
  • 为什么这样可以找到大多数数字呢?由于我们找的是大多数的数字,那么即使其他数字全部由这个大多数数字一对一换掉了,也可以剩下来大多数数字,更别说我们这里的算法还存在对方人互爆情况了

代码:

代码语言:javascript
复制
/**
         * 守阵地法,每个不同的数字都是一个部队,遇到自己人进行阵营人数++,堆到敌人就自爆带走
         *
         * @author zyh
         * @date 2021/11/3
         */
        public int majorityElement(int[] nums) {
            int count = 0;
            Integer currNum=null;
            for (int i = 0; i < nums.length; i++) {
                if (currNum==null){
                    count=1;
                    currNum=nums[i];
                }else{
                    if (nums[i]==currNum){
                        count++;
                    }else{
                        count--;
                        if (count==0){
                            currNum=null;
                        }
                    }
                }
            }
            return currNum;
        }
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021/11/3 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 思路:
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com