LeetCode -- 面试题 17.10. 主要元素

/**
 * 面试题 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。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值