编写一个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 是数组中不同的最大值和第二大值元素。
广告