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; }