关于java:offer-39-数组中出现次数超过一半的数字

数组中呈现次数超过一半的数字


数组中呈现次数超过一半的数字” 简称为 “众数” 。

题解

排序

数组中点的元素肯定就是超过数组长度一半的那个元素,依照从小到大排列

这个办法有点秀

哈希表统计法 键值对

getOrDefault(Object key, V defaultValue) 

这个函数是如果map中存在这个key,那就返回这个key自身的value,如果不存在这个key,那就返回这个key默认的defaultValue,也就是这个函数键前面带的那个defaultValue
如果这个键的值超过了长度的一半,那就阐明就是这个键就是题目要求,因为只有一个元素能够超过数组长度的一半

摩尔投票法





这个投票法有意思

  • 因为题目说了肯定存在一个众数,如果题目没有说,如果可能不存在众数,那就须要重新考虑

  • 最初那个要加一个验证,看这个最初剩下的数,他的长度是不是大于数组的一半

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理