/**
* 面试题 17.10. 主要元素
*
* 第一个想法是哈希表.通过哈希表统计每一个元素出现次数,然后选择。
* 时间复杂度:O(n)
* 空间复杂度:O(n)
* 很简单的一题 --------> 然后看到空间复杂度是常数级。
*
*
* Boyer-Moore 投票算法(摩尔投票)
* 在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;
* 在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍历的结果出现次数,确定其是否为众数;
* 如果一个序列中没有占到多数的元素,那么第一次的结果就可能是无效的随机元素。
*
*/
public class SolutionMS1710 {
public int majorityElement(int[] nums) {
int candidate = 0, count = 0;
for (int num : nums) {
switch (count) {
case 0:
candidate = num;
count++;
break;
default:
count += num == candidate ? 1 : -1;
}
}
count = 0;
int length = nums.length;
for (int num : nums) {
if (num == candidate) {
count++;
}
}
return count * 2 > length ? candidate : -1;
}
}
//我:力扣,你给翻译翻译,什么叫简单?翻译翻译,什么叫简单?
//力扣:这还用翻译,都说了。
//我:我让你翻译给我听,什么叫简单?
//力扣:不用翻译,这就是简单啊。
//大佬:难道你听不懂什么叫简单?
//我:我就想让你翻译翻译,什么叫简单!
//力扣:简单嘛
//我:翻译出来给我听,什么他妈的叫简单!什么他妈的叫他妈的简单!
//力扣:什么他妈的叫简单啊?
//大佬:简单就是三秒之后,我三行代码直接AC,你花三十分钟最终打开题解!明白了吗?
//力扣:这就是简单啊
//我:翻译翻译 翻译翻译!
//力扣:简单就是他三秒AC,你花三十分钟打开题解,还看不懂!
//我:哈,大哥这他妈的叫简单啊,小弟我愿意再花十年AC。
LeetCode -- 面试题 17.10. 主要元素
最新推荐文章于 2024-02-15 09:39:09 发布