每日一练Day05:寻找多数元素

简介: 每日一练Day05:寻找多数元素

这道题来自LeetCode,下面我们来抽丝剥茧,细品一下解题思想。

多数元素I

题目特点: 大小为n非空数组,并且给定的数组总是存在多数元素、返回其中出现次数大于n/2的元素——多数元素

1、方法一

思路1:

由于给定数组大小为n,所以出现次数大于n/2的元素至多只有一个,如果我们将给定数组排序,那么数组中出现次数超过一半[n/2]的数字,一定是排好序之后,中间位置的数字。

理论成立,实践开始:

public int majorityElement(int[] nums) {
    Arrays.sort(nums);//排序数组
    return nums[nums.length/2];
}

测试结果:

2、方法二

思路2:摩尔投票法

首先我们先了解一下摩尔投票法,摩尔投票法主要分为两个阶段即抵消阶段计数阶段

抵消阶段: 如果两个不同候选人的投票进行对抗,则抵消掉一张票,如果两个投票相同,则累加抵消次数。如果计票为0,则换候选人,继续重复上述步骤。

计数阶段: 在抵消阶段最后得到的抵消计数只要不为0,那个候选人是有可能超过一半的票数的,为了验证,则需要遍历一次,统计票数才可确定。

例如找出数组array=[2,3,1,3,3,2,3]中的大于n/2的多数元素,可分解为下述过程:

理论成立,实践开始:

注: 对于这道题,由于题目已经明确说明给定的数组总是存在多数元素,所以可以省去验证步骤。

    public int majorityElement(int[] nums) {
        //初始化候选人和他们的计票
        int count=0;
        int tmp=nums[0];
        for (int i = 0; i < nums.length; i++) {
            //增加抵消次数
            if(nums[i]==tmp) {
                count++;
            } else {
                //抵消一票
                count--;
            }
            //计票数为0,换候选人
            if(count==0) {
                tmp=nums[i+1];
            }
        }
        return tmp;
    }

相关文章
springboot自定义拦截器,校验token
springboot自定义拦截器,校验token
736 6
|
开发框架 JavaScript 前端开发
django快速实现个人博客(附源码)
Django作为一款成熟的Python Web开发框架提供了丰富的内置功能,如ORM(对象关系映射)、Admin管理界面、URL分发、模板系统、表单处理等,使得开发者能够快速搭建Web应用,大幅提高了开发效率。下面介绍如何快速的通过django模板系统快速实现个人博客。
305 0
|
设计模式 Oracle Java
【设计模式】我终于读懂了桥接模式。。。
【设计模式】我终于读懂了桥接模式。。。
【设计模式】我终于读懂了桥接模式。。。
|
安全 前端开发 Windows
手把手教会你怎么重装电脑系统!
手把手教会你怎么重装电脑系统!
11653 0
|
存储 监控 Oracle
为什么JDK8用Metaspace替代PermGen
为什么JDK8用Metaspace替代PermGen
153 0
|
JSON Java 数据格式
Java jackson 由String转成List和各种对象
时间久了,会忘记具体怎么转,记录一下,后面方便使用
1057 1
|
缓存 JavaScript 前端开发
前端面试100道手写题(6)—— 虚拟滚动
虚拟滚动在前端中是一个很常见的解决方案,由于浏览器对于内存的限制,当页面需要展示大量 DOM 节点(如:列表数据超过 10 万)的时候,如果完整渲染整个 DOM 树,当页面数据需要更新重新渲染的时候就会出现滚动卡顿,这个时候就需要虚拟滚动去模拟浏览器原生滚动事件,从而避免这个卡顿情况。
285 0
|
容器
css3 flex弹性布局详解
css3 flex弹性布局详解
272 0
|
安全 前端开发 Java
Spring Security-全面详解(学习总结---从入门到深化)(上)
Spring Security是Spring项目组提供的安全服务框架,核心功能包 括认证和授权。它为系统提供了声明式安全访问控制功能,减少了 为系统安全而编写大量重复代码的工作。
18372 2
Spring Security-全面详解(学习总结---从入门到深化)(上)
LeetCode每日一题(23)——最大三角形面积
最大三角形面积 1.题目 2.示例 3.思路 4.代码 暴力穷举 凸包
169 0
LeetCode每日一题(23)——最大三角形面积