C++如何输出某特定数组中和最大的两元素下标
时间: 2024-12-19 20:24:51 浏览: 16
在C++中,你可以使用排序和双指针技术来找出数组中和最大的两个元素及其下标。下面是一个简单的实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 函数返回和最大的两个元素及其索引
std::pair<int, int> maxSumPairIndices(const std::vector<int>& arr) {
// 如果数组只有一个元素或者为空
if (arr.empty()) {
throw std::runtime_error("Array should not be empty");
}
// 对数组按值排序
sort(arr.begin(), arr.end());
int sum = arr[0] + arr[arr.size() - 1]; // 最大和等于最前面和最后一个元素之和
// 双指针,一个指向开始,一个指向结束
int i = 0, j = arr.size() - 1;
// 定义结果最大和、以及对应索引
int maxSum = sum, index1 = 0, index2 = arr.size() - 1;
// 当前和大于已知最大和时,更新结果
while (i < j) {
if (arr[i] + arr[j] > maxSum) {
maxSum = arr[i] + arr[j];
index1 = i;
index2 = j;
}
// 如果当前和小了,说明左边元素更大,移动左指针
else if (arr[i] + arr[j] <= maxSum) {
i++;
}
// 否则右边元素更大,移动右指针
else {
j--;
}
}
return std::make_pair(index1, index2);
}
int main() {
std::vector<int> arr = {3, 7, 2, 5, 8, 1, 9, 4};
std::pair<int, int> indices = maxSumPairIndices(arr);
std::cout << "The two elements with the maximum sum are at indices (" << indices.first << ", " << indices.second << ").\n";
return 0;
}
```
这段代码首先对数组进行排序,然后使用两个指针分别从两端向中间扫描。当发现更大的和时,就更新最大和及其对应的索引。最终返回这两个索引。
阅读全文