首页 > 编程语言 > 详细

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

时间:2021-09-07 04:31:24      阅读:19      评论:0      收藏:0      [点我收藏+]

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

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

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

 

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

原文:https://www.cnblogs.com/221lin/p/15234577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!