编写一个C++程序,在给定的无序整数数组中查找最大值和第二大值。
假设我们给定一个大小为N的无序整数数组。任务是找到数组中存在的不同最大值和第二大值元素。数组中也可能包含重复元素。因此,我们只需要找到不同的元素。例如:
输入-1 −
N = 5
A[ ] = { 2, 2, 1, 3, 4 }输出 −
4 3
解释 − 从给定的数组中,我们可以看到‘4’是最大值,‘3’是第二大值。
输入-2 −
N = 4
A[ ] = { 1,3,3,2 }输出 −
3 2
解释 − 从给定的4个大小的数组中,我们可以看到‘3’是最大值,‘2’是第二大值,所以我们将返回3 2作为输出。
解决这个问题的方法
在给定的N大小的数组中,也可能有一些重复的元素。为了找到数组中的最大值和第二大值元素,我们可以初始化两个变量来存储最大值和第二大值。
最初,如果当前元素大于最大值,我们将它的值存储到最大值中,并将最大值(之前的)的值存储到第二大值中。
为了找到不同的元素,我们将检查当前元素是否等于最大值。如果当前值不等于最大值并且也大于第二大值,那么我们将用当前值替换第二大值的先前值。
初始化并输入数组的大小N。
函数`maxAndSecondMax(int arr[], int size)`将数组和数组大小作为输入,返回给定数组的最大值和第二大值元素。
迭代数组元素,如果当前元素大于最大值,则将当前值存储到最大值中,并将最大值(之前的)的值存储到第二大值中。
否则,如果当前值大于第二大值,则用当前值替换先前值。同时,当前值不应等于最大值。
检查第二大值是否不包含任何值。
返回最大值和第二大值作为最终输出。
示例
#include<bits/stdc++.h>
using namespace std;
void maxAndSecondMax(int *arr, int size){
int max= INT_MIN;
int s_max= INT_MIN;
for(int i=0;i<size; ++i){
if(arr[i] >max){
s_max= max;
max= arr[i];
}
else if(arr[i]> s_max && arr[i]!= max){
s_max= arr[i];
}
}
if(s_max==INT_MIN){
s_max= -1;
}
cout<<max<<" "<<s_max;
}
int main(){
int N= 6;
int A[N]= {1,3,2,5,6,3};
maxAndSecondMax(A,N);
return 0;
}输出
如果我们运行上面的代码,它将打印输出为:
6 5
6 和 5 是数组中不同的最大值和第二大值元素。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP