previous smaller element hackerrank
//nearest smaller to left or nearest smaller element //stack implementation #include <iostream> #include <stack> #include <vector> using namespace std; vector <int> left_nearestSmaller(int arr[], int n){ vector <int> v; stack <int> s; for(int i = 0; i<n; i++){ if(s.size() == 0) v.push_back(-1); else if(s.size()>0 && s.top() < arr[i]) v.push_back(s.top()); else if(s.size()> 0 && s.top() > arr[i]){ while(s.size()>0 && s.top() >= arr[i]){ s.pop(); } if(s.size() == 0) v.push_back(-1); else v.push_back(s.top()); } s.push(arr[i]); } return v; } int main(){ int n; cin >> n; int arr[n]; for(int i = 0; i<n; i++){ cin >> arr[i]; } vector <int> vec = left_nearestSmaller(arr, n); for(int i = 0; i<n ; i++){ cout << vec[i] << " "; } }