调试中...
调试中...
题目描述
题目描述
题解
题解
提交记录
提交记录
代码
代码
测试用例
测试用例
测试结果
测试结果
简单
相关标签
相关企业
提示

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -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
通过次数
82.7K
提交次数
147.9K
通过率
55.9%

相关标签

相关企业

提示 1
从蛮力解法开始。你能检查一下每个值是否为主要元素吗?

提示 2
考虑蛮力解法。我们选择一个元素,然后通过计算匹配和非匹配元素的数量来验证它是否是主要元素。假设对于第一个元素,前几次检查显示 7 个不匹配的元素和 3 个匹配的元素。有必要继续检查这个元素吗?

提示 3
主要元素一开始看起来并不一定像主要元素。例如,有可能主要元素出现在数组的第一个元素中,然后在接下来的 8 个元素中都不再出现。但是,在这些情况下,主要元素将在数组的后面出现(实际上,在数组的后面会出现很多次)。当某个元素看起来“不太像”主要元素时,继续检查它并不一定很重要。

提示 4
还要注意,主要元素对于某些子数组也必须是主要元素,而且子数组不能拥有多个主要元素。

提示 5
试试这个:给定一个元素,开始检查它是否是一个子数组的开始,同时对于这个子数组,该元素是它的主要元素。一旦它变得“不太可能”(出现的次数少于一半),就开始检查下一个元素(子数组之后的元素)。

评论 (0)

《程序员面试金典(第 6 版)》独家授权
本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。
© 2025 领扣网络(上海)有限公司
0 人在线
行 1,列 1
运行和提交代码需要登录
nums =
[3,2,3]
Source