博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-单调栈-每日温度
阅读量:3961 次
发布时间:2019-05-24

本文共 1402 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

方法一 暴力求解

class Solution {
public int[] dailyTemperatures(int[] T) {
List
list = new ArrayList<>(); for(int i = 0; i < T.length; i++) {
boolean flag = false; for(int j = i + 1; j < T.length; j++) {
if(T[j] > T[i]) {
flag = true; list.add(j - i); break; } } if(!flag) {
list.add(0); } } return list.stream().mapToInt(Integer::intValue).toArray(); }}

方法二 单调栈

单调栈说白了就是一个栈的结构,里面的元素要么从小到大排列,要么从大到小排列,我习惯把栈放水平,这样就成了从左到右的变化,如果你要找数组中某个元素的左右两边比该元素大,你就使用从左到右递减的栈,因为你维护的是一个递减的栈,那么该元素左边就是比它大的,右边不符合递减,将要加入栈的元素也比它大

class Solution {
public int[] dailyTemperatures(int[] T) {
Stack
stack = new Stack<>(); int[] res = new int[T.length]; for(int i = 0; i < T.length; i++) {
int tem = T[i];//获取当前的温度 //破坏了递减栈的结构,就不停的出栈 while(!stack.isEmpty() && T[stack.peek()] < tem) {
int popIndex = stack.pop(); //出栈的元素右边元素(待入栈元素)比出栈的元素大 res[popIndex] = i - popIndex; } //满足单调栈结构 入栈 stack.push(i); } while(!stack.isEmpty()) {
int popIndex = stack.pop(); res[popIndex] = 0; } return res; }}

转载地址:http://dlhzi.baihongyu.com/

你可能感兴趣的文章
POSIX消息队列mq_open问题
查看>>
两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];
查看>>
用户态切换到内核态的3种方式
查看>>
笔试常见的智力题(附答案)
查看>>
内核库函数
查看>>
Linux 系统内核空间与用户空间通信的实现与分析
查看>>
如何写好应用型学术论文
查看>>
如何查看进程的各种限制
查看>>
64位int类型用printf输出问题
查看>>
网络后台开发面试题目
查看>>
Linux 共享内存限制的查看与设置
查看>>
进程的状态转换
查看>>
如何查看进程的信息(线程数)
查看>>
Linux中的chage命令
查看>>
linux-详细解析密码文件passwd与shadow
查看>>
su- 与su的区别
查看>>
linux下发邮件mail
查看>>
echo如何手动输出换行
查看>>
身份证的正确使用方法——非常重要的知识
查看>>
ExtJS & Ajax
查看>>