教育行业网站制作,江津区网站建设,结构设计师之家官网,个人工作室一:题目 二#xff1a;思路
1.读题读不懂#xff0c;那就分析给出的示例#xff0c;本题意思就是给出一串数#xff0c;然后找出找出该元素之后#xff0c;第一个大于 该元素的下标#xff08;这一串数的下标是从一开始的#xff09;如果找不到比起大的#xff0c;那就…一:题目 二思路
1.读题读不懂那就分析给出的示例本题意思就是给出一串数然后找出找出该元素之后第一个大于 该元素的下标这一串数的下标是从一开始的如果找不到比起大的那就记为0 2.这里我们是选择的是利用栈,我们从右边开始把数组的元素下标压入栈中然后在判断当前元素 与栈顶元素的大小关系如果比其大那么就pop 跟新栈顶元素直到我们找到栈顶元素大于该元素 记录该下标。
三:上码
/**思路:1.读题读不懂那就分析给出的示例本题意思就是给出一串数然后找出找出该元素之后第一个大于该元素的下标这一串数的下标是从一开始的如果找不到比起大的那就记为0 2.这里我们是选择的是利用栈,我们从右边开始把数组的元素下标压入栈中然后在判断当前元素与栈顶元素的大小关系如果比其大那么就pop 跟新栈顶元素直到我们找到栈顶元素大于该元素记录该下标。 51 4 2 3 52 5 4 5 0*/
#includeiostream
#includestack
#includevector
using namespace std;int main(){int a[100000];//注意数组范围得需要开的足够大int ans[100000];stackint s;int N; scanf(%d,N);for(int i 1; i N; i){//cin a[i];scanf(%d,a[i]);}for(int i N; i 1; i--){//这里我们选择的入栈顺序是从数组的尾部开始 while(!s.empty() a[s.top()] a[i]){//这个就是为了找到一个大于a[i]的元素下标也就是s.top()。 s.pop();}ans[i] s.empty() ? 0 : s.top();//如果s是空栈的话,那么就为0,否则就为栈的顶部元素s.push(i); } cout ans[1];for(int i 2; i N; i){cout ans[i];}}