概述
数组中有一个数字出你可以假设数组是非空的,并且给定的数组总是存在多数元素。
现的次数超过数组长度的一半,请找出这个数字。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
思路:
1、题目分析
题目的要求就是要找出数组中出现次数大于数组长度一半的数字。
2、解题分析
这个数字如果出现的次数比数组长度一半都大,那么肯定是众数。第一种方法:那么对这个数组进行排序去中间的数就是这个数字了。第二种方法:采用哈希表去统计每个数字出现的次数然后遍历哈希表找出出现的次数大于数组长度一半的数组。第三种方法:摩尔投票法。代码示例:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
#hash法
dic = collections.defaultdict(int)
size = len(nums)/2
for i in nums:
dic[i]+=1
for k,v in dic.items():
if v>size:
return k
#摩尔法
votes = 0
for num in nums:
if votes == 0:
x = num
votes += 1 if num == x else -1
return x
#排序法
return sorted(nums)[len(nums)//2]
时间和空间复杂度依次为O(N) ,O(Nlog2N)和O(1),O(N)和O(1)。
总结:没啥特别的,摩尔投票法需要了解一下。以后专门写一篇介绍摩尔投票法。
最后
以上就是合适香烟为你收集整理的《Leetcode》面试题39. 数组中出现次数超过一半的数字的全部内容,希望文章能够帮你解决《Leetcode》面试题39. 数组中出现次数超过一半的数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复