編寫一個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