用递归求众数的代码算法
时间: 2024-09-13 16:10:40 浏览: 43
递归求众数的算法通常基于分治思想,将数组分成两部分,递归地在左右两部分数组中分别找到众数,然后合并结果。如果左右部分找到的众数相同,那么这个数就是整个数组的众数。如果不同,则需要对整个数组进行遍历以确定哪个数是真正的众数。以下是一个递归求众数的示例代码:
```python
def find_majority_element(nums, left, right):
if left == right:
return nums[left]
mid = (left + right) // 2
left_majority = find_majority_element(nums, left, mid)
right_majority = find_majority_element(nums, mid + 1, right)
if left_majority == right_majority:
return left_majority
# 计算左右两个候选众数在区间 [left, right] 中的出现次数
left_count = sum(1 for i in range(left, right + 1) if nums[i] == left_majority)
right_count = sum(1 for i in range(left, right + 1) if nums[i] == right_majority)
# 返回出现次数较多的众数
return left_majority if left_count > right_count else right_majority
# 示例使用
nums = [2, 2, 1, 1, 1, 2, 2]
print(find_majority_element(nums, 0, len(nums) - 1))
```
这个算法的时间复杂度是O(nlogn),因为每次递归都是将数组分成两半,然后对两个子数组进行递归,递归的深度是logn,每层递归需要O(n)的时间来合并结果。但是通过合并步骤可以在对数时间内计算出最终的众数。
阅读全文