栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

7-3 模板题 (10 分)(思路+详解)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7-3 模板题 (10 分)(思路+详解)

一:题目


二:思路

1.读题读不懂,那就分析给出的示例,本题意思就是给出一串数,然后找出找出该元素之后,第一个大于
该元素的下标(这一串数的下标是从一开始的)如果找不到比起大的,那就记为0
2.这里我们是选择的是利用栈,我们从右边开始把数组的元素下标压入栈中,然后在判断当前元素
与栈顶元素的大小关系,如果比其大那么就pop 跟新栈顶元素,直到我们找到栈顶元素大于该元素
记录该下标。

三:上码
	
#include
#include 
#include
using namespace std;

int main(){
	
	int a[100000];//注意数组范围得需要开的足够大
	int ans[100000];
	stack 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];
	}
		
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号