采用分治法求一个整数序列的最大和最小元素 用c++实现
时间: 2023-09-11 22:12:03 浏览: 157
好的,以下是我给出的C++代码,实现了采用分治法求一个整数序列的最大和最小元素:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Result {
int max_value;
int min_value;
};
Result findMinMax(vector<int>& nums, int left, int right) {
Result result;
if (left == right) {
result.max_value = nums[left];
result.min_value = nums[left];
return result;
}
if (left + 1 == right) {
result.max_value = max(nums[left], nums[right]);
result.min_value = min(nums[left], nums[right]);
return result;
}
int mid = (left + right) / 2;
Result left_result = findMinMax(nums, left, mid);
Result right_result = findMinMax(nums, mid + 1, right);
result.max_value = max(left_result.max_value, right_result.max_value);
result.min_value = min(left_result.min_value, right_result.min_value);
return result;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Result result = findMinMax(nums, 0, nums.size() - 1);
cout << "Max value: " << result.max_value << endl;
cout << "Min value: " << result.min_value << endl;
return 0;
}
```
在上面的代码中,我们定义了一个 `Result` 结构体,用于存储最大值和最小值。然后,我们实现了一个 `findMinMax` 函数,用于实现分治法求解最大值和最小值。在函数中,我们首先处理边界情况,即当序列中只有一个元素或两个元素时,直接返回结果。对于其他情况,我们将序列分成两个部分,分别递归地求解左半部分和右半部分的最大值和最小值,最终将左半部分和右半部分的结果合并得到整个序列的最大值和最小值。
最后,在 `main` 函数中,我们定义了一个整数序列,调用 `findMinMax` 函数,输出结果。
阅读全文