編寫一個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+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.