我是靠谱客的博主 呆萌日记本,这篇文章主要介绍《Leetcode》面试题39. 数组中出现次数超过一半的数字,现在分享给大家,希望可以做个参考。

数组中有一个数字出你可以假设数组是非空的,并且给定的数组总是存在多数元素。

现的次数超过数组长度的一半,请找出这个数字。

示例 1:

复制代码
1
2
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2

思路:

1、题目分析

题目的要求就是要找出数组中出现次数大于数组长度一半的数字。

2、解题分析

这个数字如果出现的次数比数组长度一半都大,那么肯定是众数。第一种方法:那么对这个数组进行排序去中间的数就是这个数字了。第二种方法:采用哈希表去统计每个数字出现的次数然后遍历哈希表找出出现的次数大于数组长度一半的数组。第三种方法:摩尔投票法。代码示例:
 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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(Nlog2​N)和O(1),O(N)和O(1)。

总结:没啥特别的,摩尔投票法需要了解一下。以后专门写一篇介绍摩尔投票法。

最后

以上就是呆萌日记本最近收集整理的关于《Leetcode》面试题39. 数组中出现次数超过一半的数字的全部内容,更多相关《Leetcode》面试题39.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部