给定一个含n个整数顺序存储的线性表,按分治法思路,要求采用二分策略,设计一个求出其最大值。 输入格式: 第一行输入一个整数n。第二行为n个整数。n和n个数小于等于10000。 输出格式: n个整数中的最大值。
时间: 2023-05-22 09:03:49 浏览: 148
这是一个经典的二分查找问题,我们可以采用分治法思路,将整个线性表分成两段,分别查找左半部分和右半部分的最大值,然后再将两个最大值进行比较,返回最大值即可。
具体实现可以用递归的方法,对于n个元素的线性表,设左半部分有n1个元素,右半部分有n2个元素,那么我们可以先求出左半部分的最大值left_max,然后再求出右半部分的最大值right_max,最终返回left_max和right_max中较大的值。具体代码如下:
```
#include <iostream>
using namespace std;
int find_max(int arr[], int left, int right)
{
if(left == right) //只剩一个元素
return arr[left];
int mid = (left + right) / 2; //求出中间位置
int left_max = find_max(arr, left, mid); //递归求解左半部分的最大值
int right_max = find_max(arr, mid + 1, right); //递归求解右半部分的最大值
return max(left_max, right_max); //返回左右两半最大值中的较大值
}
int main()
{
int n, arr[10001];
cin >> n;
for(int i = 0; i < n; i++)
cin >> arr[i];
int max_val = find_max(arr, 0, n-1); //调用函数查找最大值
cout << max_val << endl;
return 0;
}
```
值得注意的是,此实现使用递归进行分治,可能会导致栈溢出或效率低下,如果数据量过大,可以使用迭代的方法进行分治。
阅读全文