接雨水和每日温度

								**接雨水**

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。在这里插入图片描述

int trap(int* height, int heightSize){
    if(heightSize==0){
        return 0;
    }
    int all=0;//总雨水
    int stack[heightSize];//数组模拟栈
    int num=0;//栈顶指针
    int i;
    for(i=0;i<heightSize;i++){
        while(num&&height[i]>height[stack[num-1]]){//当栈顶指针大于0,并且入栈元素大于栈顶元素时
            int top=stack[--num];//栈顶下标
            if(!num){
                break;
            }
            int left=stack[num-1];//栈顶元素的前一个元素
            int width=i-left-1;//宽度
            int high =fmin(height[i],height[left])-height[top];//高度
            all+=width*high;
        }
        stack[num++]=i;
    }
    return all;
}
								****每日温度****

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize){
    *returnSize=temperaturesSize;
    int* result=malloc(sizeof(int)*temperaturesSize);
    memset(result,0,sizeof(int)*temperaturesSize);
    int stack[temperaturesSize];//数组模拟栈
    int i,num=0;//栈顶指针
    for(i=0;i<temperaturesSize;i++){
        while(num&&temperatures[i]>temperatures[stack[num-1]]){
            result[stack[num-1]]=i-stack[num-1];//当前元素和栈顶元素下标差
            num--;//比较栈顶前一个元素
        }
        stack[num++]=i;
    }
    return result;
}

思路:
单调栈,单调栈存储的是下标,从栈底到栈顶的下标对应的数组中的元素递减

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值