网站首页 > 精选教程 正文
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例
- 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
- 输出: 2
限制
- 1 <= 数组长度 <= 50000
方法:哈希表
我们创建一个哈希表用来统计每个元素出现的次数,当循环遍历数组的时候,如果当前元素出现的次数大于目标数组的长度的一半,立即返回该元素即可。
代码如下:
复杂度分析
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。
- 空间复杂度:O(n)。
方法:数组排序
如果将数组中所有元素进行顺序排序,那么数组中间的元素一定是众数。
代码如下:
复杂度分析
- 时间复杂度:O(nlogn)。将数组排序的时间复杂度为 O(nlogn)。
- 空间复杂度:O(logn)。
方法:摩尔投票法
Boyer-Moore majority vote algorithm,该算法解决的问题是如何在任意多的候选人(选票无序),选出获得票数最多的那位。
- 维护一个众数和他出现的次数。
- 遍历数组中的所有元素,如果次数为 0,我们就把众数赋值为当前值。
- 如果众数等于当前值,次数加 1;否则减 1;
- 遍历完整个数组后,最后统计的众数即为整个数组的众数。
代码如下:
复杂度分析
- 时间复杂度:O(n)。Boyer-Moore 算法只对数组进行了一次遍历。
- 空间复杂度:O(1)。Boyer-Moore 算法只需要常数级别的额外空间。
END
水滴集多成大海,读书集多成学问,赠友人。
好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。
猜你喜欢
- 2025-01-06 算法:有序数组的平方(Java版)
- 2025-01-06 ArrayIndexOutOfBoundsException异常分析及解决办法
- 2025-01-06 西门子SCL语言中如何求—任意长度数组的最大值和平均值
- 2025-01-06 Java之数组数据操作之电子邮件地址判断
- 2025-01-06 数组-一文搞定前缀和数组
- 2025-01-06 845. 数组中的最长山脉
- 2025-01-06 Java面试:你了解HashMap吗?
- 2025-01-06 Java里的ArrayList相当于不定长度的数组
- 2025-01-06 python散装笔记——17: 数组
- 2025-01-06 java项目过程中常用的日期计算工具
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)