在学校中,N个小朋友站成一队, 第i个小朋友的身高为height[i],,单调栈的应用

news/2024/10/22 19:54:49/

在学校中,N个小朋友站成一队, 第i个小朋友的身高为height[i],
第i个小朋友可以看到的第一个比自己身高更高的小朋友j,那么j是i的好朋友(要求j > i)。
请重新生成一个列表,对应位置的输出是每个小朋友的好朋友位置,如果没有看到好朋友,请在该位置用0代替。
小朋友人数范围是 [0, 40000]。

//暴力解法
#include<stdio.h>
int main(){int height[40001]={0};int friend[40001]={0};int n=0;printf("请输入孩子个数:");scanf("%d",&n);printf("请输入孩子身高:");//从左到右是从头到尾for(int i=1;i<=n;i++){scanf("%d",&height[i]);}for(int i=n;i>1;i--){ //从尾部向前找第一个比自己高的int j=i-1;        //从前一个人开始找while(height[i]>=height[j]&&j>0)j--;if(j==0)friend[i]=0;        //表示没朋友elsefriend[i]=j;        //i号位置的朋友在j号位置}for(int i=1;i<=n;i++)printf("%d ",friend[i]);return 0;
}

使用栈来避免重复的比较,单调栈的应用
1.从第一个小朋友身高开始扫描,第一个小朋友a直接压如栈中,扫描下一个小朋友b的身高,假设b后边的小朋友是c
2.若b的身高比a高,就让a出栈,理由如下:
①a不会是b的朋友
②在b后边的小朋友的朋友一定不会是a,b的朋友属性优于a,因b离后边小朋友更近且更高
3.若a的身高比b的高,则将a保留在栈中,并让b入栈,理由如下:
①a一定是b的朋友,但是b后边的小朋友的朋友,可能是a也可能是b,因a虽离得远,但是a比b高
4.栈中相邻元素中,前一个一定是后一个的朋友,朋友才会在栈中相遇相邻


http://www.ppmy.cn/news/1333513.html

相关文章

C#使用TimeSpan对象获取时间间隔

目录 一、TimeSpan基础知识 二、实例 一、TimeSpan基础知识 使用TimeSpan对象可以方便地获取两个时间段的间隔。两个时间信息相减后会得到一个TimeSpan对象&#xff0c;该TimeSpan对象代表时间间隔&#xff0c;可以通过TimeSpan对象的Days、Hours、Minutes、Seconds、Millise…

互信息的简单理解

在介绍互信息之前&#xff0c;首先需要了解一下信息熵的概念&#xff1a;所谓信息熵&#xff0c;是指信息论中对一个随机变量不确定性的度量&#xff0c;对于随机变量x&#xff0c;信息熵的定义为&#xff1a; H ( x ) − ∑ x p ( x ) l o g p ( x ) H(x)-\sum_xp(x)logp(x) …

1502.判断能否形成等差数列(Java)

题目描述&#xff1a; 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 输入&#xf…

swift 进阶知识点

本文的知识点会比较散&#xff0c;是基础语法之外的一些进阶内容&#xff0c;如果有写的不妥的地方&#xff0c;欢迎评论区指正&#xff5e; Optional 可选值是通过枚举实现的&#xff1a; enum Optional<Wrapped> {case nonecase some(Wrapped)对于Optional<Wrapp…

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课 (opens new window)&#xff1a;贪心算法理论基础&#xff01; (opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家…

windows上使用anconda安装tensorrt环境

windows上使用anconda安装tensorrt环境 1 安装tensorrt1.1 下载最新的稳定的tensorrt 8.6.1(tensorrt对应的cuda、cudnn等版本是参考链接4)1.2 将tensorrt添加到环境变量1.3 安装tensorrt依赖1.4 安装Pycuda1.5 安装pytorch 2 测试2.1 测试TensorRT 样例(这个测试主要来源于参考…

编程笔记 html5cssjs 058 css计数器

编程笔记 html5&css&js 058 css计数器 一、带计数器的自动编号二、嵌套计数器三、CSS 计数器属性练习小结 CSS 计数器是由 CSS 保持的“变量”&#xff0c;其值可以通过 CSS 规则递增&#xff08;以跟踪其使用次数&#xff09;。计数器使您可以根据内容在文档中的位置来…

Python 显示所有汉字

我们知道&#xff0c;在我们目前使用的计算机系统中&#xff0c;所有的数据都是以二进制形式表示的&#xff0c;而中文字符包含了大量的汉字、标点符号和其他特殊字符&#xff0c;需要通过编码方式将其转换为二进制数据进行处理。其中&#xff0c;中文编码是将中文字符表示为计…