求数组最大递增子串

题目描述: 给定一个数组, 对于每一个位置向前找不大于该位置的最长序列长度, 返回最长的一个序列长度, 该位置之前的序列不需要连续增长, 只要小于当前位置值即可. 

例如: [1, 4, 2, 6], length[0] = 1, length[1] = 2, length[2] = 1, length[3] = 4.


思路: 利用一个栈维护一个递减序列, 也就是如果当前元素小于栈顶元素, 那么这个元素之前没有比他小的了. 否则就将栈中的元素出栈, 直到为空或者栈顶元素大于当前元素.

代码如下:

int longestIncreasingSubarray(vector<int> arr)
{
    if(arr.size()==0) return 0;
    stack<int> st;
    int ans = 1;
    for(int i = 0; i < arr.size(); i++)
    {
        while(!st.empty() && arr[st.top()] <= arr[i]) st.pop();
        ans = max(ans, i-(st.empty()?-1:st.top()));
        st.push(i);
    }
    return ans;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值