in two traversal-
vector<int> getSecondOrderElements(int n, vector<int> a)
{
int mini=INT_MAX;
int maxi=INT_MIN;
for(int i=0 ; i<n ; i++)
{
if(a[i]>maxi)
{
maxi=a[i];
}
if(a[i]<mini)
{
mini=a[i];
}
}
vector<int>ans;
int mi=INT_MAX;
int ma=INT_MIN;
for(int i=0 ; i<n ; i++)
{
if(a[i]>ma and a[i]!=maxi)
{
ma=a[i];
}
if(a[i]<mi and a[i]!=mini)
{
mi=a[i];
}
}
ans.push_back(ma);
ans.push_back(mi);
return ans;
}
in single traversal-
int findSecondLargest(int n, vector<int> &arr)
{
int largest=INT_MIN;
int secondlargest=INT_MIN;
for(int i=0 ; i<n ; i++)
{
if(arr[i]>largest)
{
secondlargest=largest;
largest=arr[i];
}
if(arr[i]<largest and arr[i]>secondlargest)
{
secondlargest=arr[i];
}
}
if(secondlargest==INT_MIN)
{
return -1;
}
return secondlargest;
}