题目描述: 给定一个数组, 对于每一个位置向前找不大于该位置的最长序列长度, 返回最长的一个序列长度, 该位置之前的序列不需要连续增长, 只要小于当前位置值即可.
例如: [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;
}