Nearest Smaller Values

Given an array of n integers, find for each array position the nearest position to its left having a smaller value.

Example:

Input:  n = 8, arr = {2, 5, 1, 4, 8, 3, 2, 5}
Output: 0 1 0 3 4 3 3 7 

Approach

C++

#include <bits/stdc++.h>
using namespace std;

vector<intnearestSmallerValues(int nvector<int&arr)
{

    stack<intst;

    vector<intres;
    for (int i = 0i < ni++)
    {
        while (st.size() && arr[st.top()] >= arr[i])
            st.pop();
        if (st.size() > 0)
            res.push_back(st.top() + 1);
        else
            res.push_back(0);

        st.push(i);
    }
    return res;
}

int main()
{

    int n = 8;

    vector<intarr = {25148325};

    vector<intres = nearestSmallerValues(narr);

    for (int i = 0i < res.size(); i++)
        cout << res[i] << " ";

    return 0;
}


No comments:

Post a Comment