数组元素右边第一个比它大的数
题目描述
给定一个无序的正整数数组, 找出数组中每个元素右边第一个比它大的数(若没有,则返回-1)
思路
将数组首元素的下标入栈从下标为1的元素开始遍历数组假设当前遍历到的第i个元素是x,若x大于栈顶下标对应的元素,那么这个栈顶下标对应元素的右边第一个比它大的数就是x,将栈顶下标出栈,然后继续处理剩下的元素,直到栈为空或者不再大于栈顶下标对应的元素如果当前遍历到的数组元素不大于栈顶下标对应的数组元素, 那就直接入栈
代码实现
vector<int> FindFirstBigNum(vector<int>& v){
int len = v.size();
vector<int> res(len, -1);
if(len == 0){
return res;
}
stack<int> st;
st.push(0);
for(int i = 1; i < len; i++){
while(!st.empty() && v[i] > v[st.top()]){
res[st.top()] = v[i];
st.pop();
}
st.push(i);
}
return res;
}
欢迎加入每日一题,每天分享一道高频面试题。
还没有评论,来说两句吧...