数列下标

数列下标

https://ac.nowcoder.com/acm/problem/18356

题目

给出一个数列 ,求出一个数列
其中 表示数列 右边第一个比 大的数的下标(从 1 开始计数),没有找到这一个下标 就为 0。

解题思路

在从右向左遍历数组 A 时维护一个栈。这个栈存储数列 A 的下标。
如果栈非空,且栈顶的元素(下标)所代表的值小于等于当前的值,
这表示栈顶下标 sta.top() 比当前的下标大,且下标值 A[sta.top()] 小于等于当前值 A[i],就可以弹出栈顶元素,压入当前的下标。
当栈为空时,表示数列 A 的右边没有元素大于当前元素,当前所求的值是 0。

C++代码

#include<cstdio>
#include<vector>
#include<stack>
using namespace std;

int main(){
    int n;
    scanf("%d", &n);
    vector<int> A(n);
    for(int i=0; i<n; ++i){
        scanf("%d", &A[i]);
    }
    stack<int> sta;
    vector<int> ans(n, -1);
    for(int i=n-1; i>=0; --i){
        while(!sta.empty() && A[sta.top()]<=A[i])
            sta.pop();
        if(!sta.empty())
            ans[i] = sta.top();
        sta.push(i);
    }
    for(int i=0; i<n; ++i){
        printf("%d ", ans[i]+1);
    }
    return 0;
}
全部评论

相关推荐

神哥不得了:神哥来啦~自我评价和校园经历的话可以直接删了,从大厂暑期的话应该没有什么太多问题,应该是能拿到很多大厂面试机会的,就是在面试的时候表示的好一点就行,可以在面试前先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股,这两个项目的话问题不是很大,应该能够帮你找到大厂实习的,算法的话一定要刷起来,因为大厂有些还是比较看重算法的
点赞 评论 收藏
分享
虚闻松声:简历看起来很清爽。几点建议。 1. 总结提炼项目工作内容。如第一个项目第一点,研发用户信息管理、购票功能:(然后具体展开)。还可以继续总结,如基础功能开发、算法优化座位分配、并发性能提升等等 2. 优化技术栈描述。全文多次出现Spring Boot,我感觉一次就够了。可以不写或者写整个体技术架构? 3. 增加业务指标描述。最好有一些业务效果的指标。或者优化的效果指标等等。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务