c++如何在数组内先找最大值再依次寻找次大值
时间: 2024-09-13 20:07:39 浏览: 36
有一个int数组{1,3,5,-2,4,6},要求获取:最大值、最小值、元素和、平均值
5星 · 资源好评率100%
在 C++ 中,要在数组中找到最大值和次大值,可以采用两种常见的方法:线性查找和分两步遍历。以下是两种简单的实现方式:
**方法一:线性查找两次**
1. 首先,遍历整个数组找到最大值(max)。
2. 然后,从剩余的元素中再次遍历,找到第一个大于 max 的元素,即为次大值(secondMax)。
```cpp
#include <iostream>
int findSecondLargest(int arr[], int size) {
int max = arr[0];
if (size > 1) {
for (int i = 1; i < size; ++i) {
if (arr[i] > max)
max = arr[i];
}
}
int secondMax = INT_MIN;
for (int i = 0; i < size; ++i) {
if (arr[i] != max && arr[i] > secondMax)
secondMax = arr[i];
}
return secondMax == INT_MIN ? -1 : secondMax; // 返回次大值,若不存在则返回-1 或相应处理方式
}
int main() {
int arr[] = {1, 3, 5, 2, 4};
int size = sizeof(arr) / sizeof(arr[0]);
std::cout << "第二大的数是: " << findSecondLargest(arr, size) << std::endl;
return 0;
}
```
**方法二:一次遍历**
这种方法利用两个指针,一个跟踪当前最大值,另一个跟踪次大值。遍历时更新这两个值。
```cpp
#include <iostream>
// 使用 pair 来存储最大值和次大值,避免单独变量溢出问题
std::pair<int, int> findSecondLargest(int arr[], int size) {
std::pair<int, int> result = std::make_pair(arr[0], INT_MIN);
for (int i = 1; i < size; ++i) {
if (arr[i] > result.first) {
result.second = result.first;
result.first = arr[i];
} else if (arr[i] > result.second && arr[i] != result.first)
result.second = arr[i];
}
return result.second == INT_MIN ? std::make_pair(-1, -1) : result; // 返回次大值,若不存在则返回{-1, -1} 或相应处理方式
}
int main() {
int arr[] = {1, 3, 5, 2, 4};
int size = sizeof(arr) / sizeof(arr[0]);
auto [secondMax, exists] = findSecondLargest(arr, size);
if (exists)
std::cout << "第二大的数是: " << secondMax << std::endl;
else
std::cout << "数组中没有第二大的数" << std::endl;
return 0;
}
```
阅读全文