用分治法求数组最大数和最小值
时间: 2023-11-22 16:54:36 浏览: 169
可以使用分治法来求解数组的最大值和最小值。
具体做法是将数组不断地二分,直到每个子数组只包含一个元素。然后对于每个子数组,分别求出其中的最大值和最小值。最终,将所有子数组的最大值和最小值进行比较,就可以得到整个数组的最大值和最小值。
下面是使用递归的实现方式:
```python
def find_max_min(arr, left, right):
if left == right:
return arr[left], arr[left]
elif right - left == 1:
return (arr[left], arr[right]) if arr[left] < arr[right] else (arr[right], arr[left])
else:
mid = (left + right) // 2
max_left, min_left = find_max_min(arr, left, mid)
max_right, min_right = find_max_min(arr, mid+1, right)
return max(max_left, max_right), min(min_left, min_right)
```
其中,`left` 和 `right` 分别表示当前子数组的左右边界。如果当前子数组只有一个元素,那么最大值和最小值就是这个元素本身。如果有两个元素,那么比较一下大小即可。如果有多个元素,就将数组分成两半,分别求出左半部分的最大值和最小值,以及右半部分的最大值和最小值。最后,将左右两部分的最大值和最小值分别与当前子数组的最大值和最小值进行比较,得到整个数组的最大值和最小值。
例如,对于数组 `[3, 4, 1, 6, 8, 2, 9, 5, 7]`,可以调用函数 `find_max_min(arr, 0, len(arr)-1)` 来获取最大值和最小值。
阅读全文