编写一个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

65 是数组中不同的最大值和第二大值元素。

更新于: 2021年2月5日

4K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告