分治策略求解数组最大值和最小值
时间: 2023-10-11 18:06:41 浏览: 168
分治策略是一种经典的算法设计思想,其基本思想是将问题分解成若干个小问题,然后递归求解,最后将子问题的解合并起来得到原问题的解。对于求解数组最大值和最小值问题,可以采用分治策略,具体步骤如下:
1. 将数组平均分成两个子数组,分别求出两个子数组的最大值和最小值。
2. 将两个子数组的最大值和最小值进行比较,得出整个数组的最大值和最小值。
3. 递归地执行上述步骤,直到子数组的长度为1时,即可得到子数组的最大值和最小值。
4. 最后将所有子数组的最大值和最小值进行比较,得出整个数组的最大值和最小值。
下面是使用 Python 代码实现该算法:
```python
def find_max_min(arr, l, r):
# 当子数组长度为1时,返回该元素作为最大值和最小值
if l == r:
return arr[l], arr[l]
# 当子数组长度为2时,直接比较两个元素得出最大值和最小值
elif r - l == 1:
return max(arr[l], arr[r]), min(arr[l], arr[r])
# 当子数组长度大于2时,使用分治法求解
else:
mid = (l + r) // 2
max_left, min_left = find_max_min(arr, l, mid)
max_right, min_right = find_max_min(arr, mid+1, r)
return max(max_left, max_right), min(min_left, min_right)
# 测试代码
arr = [3, 5, 1, 7, 9, 2, 8, 4, 6]
max_num, min_num = find_max_min(arr, 0, len(arr) - 1)
print("Max number:", max_num)
print("Min number:", min_num)
```
该算法的时间复杂度为 $O(n\log n)$,其中 $n$ 为数组的长度。
阅读全文