用 C++ 编写一个程序,找出给定的未排序整数数组中的最大值和第二个最大值

假设我们给出了一个大小为 N 的未排序整数数组。任务是找到数组中存在的不同的 max 和第二个 max 元素。该数组也可能包含重复元素。所以我们只需要找到不同的元素。例如,

输入 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 的数组中,也可能有一些重复的元素。为了从数组中找到最大和第二个最大元素,我们可以初始化两个存储最大和第二个最大值的变量。

最初,如果当前元素大于最大值,那么我们将把它的值存储到最大值,将 的值存储max(previous)到第二个最大值。

为了找到不同的元素,我们将检查当前元素是否等于 max。如果当前值不等于最大值并且也大于第二个最大值,那么我们将用当前值替换第二个最大值的先前值。

  • 初始化并输入 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是数组中的不同元素,它们是最大值和第二个最大值。

以上是 用 C++ 编写一个程序,找出给定的未排序整数数组中的最大值和第二个最大值 的全部内容, 来源链接: utcz.com/z/358488.html

回到顶部