【LeetCode】主要元素 Java 题解
题目描述
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。
复制代码
思路分析
这个题目容易理解,首先可以采用 HashMap 记录元素出现的次数求解。
因为题目要求空间复杂度是 O(1), 参考题解,采用摩尔投票法。 投票算法的基本思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。
代码
朴素解法
复制代码
摩尔投票法
复制代码
总结
朴素解法的时间复杂度是 O(n), 空间复杂度是 O(n)
摩尔投票法解法的时间复杂度是 O(n), 空间复杂度是 O(1)
坚持每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/795bb6ae2896723bb0f28c878】。文章转载请联系作者。
评论