找出数组中每个数右边第一个比它大的元素

问题:查找所有元素后面第一个比他大的数

思路:用栈的方式将每个元素的位置下表存储起来,每次入栈的元素和当前栈顶代表的元素进行比较,如果大于栈顶元素则将其两个位置进行相减得到右边最近的大于自身的元素距离,如不大于栈顶元素则入栈;

vector<int> findMax(vector<int> num)
{
    //cout << 1 << endl;
    if (!num.size()) return num;        
    vector<int> res(num.size());        
    int i = 0;
    stack<int> s;
    int tmp = 0;
    while (i < num.size()) {
        tmp++;
  
        if (s.empty() || num[s.top()] >= num[i]) {
            s.push(i++);      
        }
        else {
            res[s.top()] = i - s.top();
            s.pop();
        }
    }
    while (!s.empty()) {                    
        res[s.top()] = 0;
        s.pop();
    }
    return res;
}

int main() {

    vector<int> num{ 56,45,96,34,85,64 };
    num = findMax(num);
    for (int i = 0; i < num.size(); ++i) {
        cout << num[i] << endl;
    }
    return 0;
}

 

找出数组中每个数右边第一个比它大的元素

上一篇:Java 中Map四种取值方式


下一篇:gcj02,bd09,wgs 左边转换python,excel