分治法求众数
时间: 2023-09-10 10:15:10 浏览: 203
分治法求众数的基本思路是将原问题划分成若干个子问题,分别求解,然后将子问题的解合并起来得到原问题的解。具体实现如下:
1. 将原数组划分为两个子数组,分别递归求解。
2. 对于每个子数组,如果存在众数,则返回该众数;否则返回-1。
3. 如果两个子数组返回的众数相同,则该数为原数组的众数;否则需要在原数组中统计两个众数的出现次数,返回出现次数较多的数即可。
具体实现代码如下:
```python
def majority_element(nums):
if not nums:
return -1
if len(nums) == 1:
return nums[0]
left = majority_element(nums[:len(nums)//2])
right = majority_element(nums[len(nums)//2:])
if left == right:
return left
left_count = 0
right_count = 0
for num in nums:
if num == left:
left_count += 1
elif num == right:
right_count += 1
if left_count > right_count:
return left
else:
return right
```
该算法的时间复杂度为O(nlogn),空间复杂度为O(logn)。
阅读全文