首页 > 编程语言 >算法学习day59单调栈part02-503、42

算法学习day59单调栈part02-503、42

时间:2023-06-16 22:55:58浏览次数:50  
标签:nums int part02 42 st day59 length height

package LeetCode.stackpart02;

import java.util.Arrays;
import java.util.Stack;

public class NextGreaterElementII_503 {
    public int[] nextGreaterElements(int[] nums) {
        //边界判断
        if(nums == null || nums.length <= 1) {
            return new int[]{-1};
        }
        int size = nums.length;
        int[] result = new int[size];//存放结果
        Arrays.fill(result,-1);//默认全部初始化为-1
        Stack<Integer> st= new Stack<>();//栈中存放的是nums中的元素下标
        for(int i = 0; i < 2*size; i++) {
            while(!st.empty() && nums[i % size] > nums[st.peek()]) {
                result[st.peek()] = nums[i % size];//更新result
                st.pop();//弹出栈顶
            }
            st.push(i % size);
        }
        return result;
    }
}
package LeetCode.stackpart02;
/**
 * 42. 接雨水
 *
 * */
public class TrappingRainWater_42 {
    public int trap(int[] height) {
        int length = height.length;
        if (length <= 2) return 0;
        int[] maxLeft = new int[length];
        int[] maxRight = new int[length];

        // 记录每个柱子左边柱子最大高度
        maxLeft[0] = height[0];
        for (int i = 1; i< length; i++) maxLeft[i] = Math.max(height[i], maxLeft[i-1]);

        // 记录每个柱子右边柱子最大高度
        maxRight[length - 1] = height[length - 1];
        for(int i = length - 2; i >= 0; i--) maxRight[i] = Math.max(height[i], maxRight[i+1]);

        // 求和
        int sum = 0;
        for (int i = 0; i < length; i++) {
            int count = Math.min(maxLeft[i], maxRight[i]) - height[i];
            if (count > 0) sum += count;
        }
        return sum;
    }
}

 

标签:nums,int,part02,42,st,day59,length,height
From: https://www.cnblogs.com/lipinbigdata/p/17486651.html

相关文章

  • CentOS yum升级MySQL 5.6到5.7.42
    注意:升级前一定要做好备份升级前请将mysql5.6小版本升级到最高升级时可将my.cnf配置文件备份,保留最基本的配置,避免因配置问题造成异常,升级完成后在逐步还原安装mysql5.7yum源如果之前已经安装了5.6的yum源,需要先卸载后在安装rpm-Uvhhttps://dev.mysql.com/get/mysql......
  • 442.数组中重复的数据 (Medium)
    问题描述442.数组中重复的数据(Medium)给你一个长度为n的整数数组nums,其中nums的所有整数都在范围[1,n]内,且每个整数出现一次或两次。请你找出所有出现两次的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为O(n)且仅使用常量额外空间的算法解决此......
  • 42. 接雨水
    给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。>双指针......
  • STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
     参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。 MCU:STM32F429ZIT6......
  • 代码随想录算法训练营第25天 | ● 216.组合总和III ● 17.电话号码的字母组合 - 第7章
     第七章 回溯算法part02 今日内容:  ●  216.组合总和III●  17.电话号码的字母组合  详细布置   216.组合总和III  如果把 组合问题理解了,本题就容易一些了。  题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%B......
  • 代码随想录算法训练营第五天| 242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快
    242.有效的字母异位词 繁冗版:1,思路:先建立两个map,对应两个字符串对应的字符,同时对他们进行计数,如果这两个数字相等,那么就是相等2,代码1boolisAnagram_complicate(strings,stringt)2{3unordered_map<char,int>existedCharBys;45for(autoch......
  • Codeforces Beta Round #42 (Div. 2)-C. Lucky Tickets
    原题链接C.LuckyTicketstimelimitpertestmemorylimitpertestinputoutputVasyathinksthatluckyticketsaretheticketswhosenumbersaredivisibleby3.Hegathered......
  • LightOJ 1422 Halloween Costumes (区间DP)
    题意:你要连续去很多个舞会,给出n个舞会你需要穿的衣服的编号,一旦脱下就不能再穿,但是可以一件套一件,问最少需要准备多少件衣服。思路:区间DP,令dp[i][j]为第i到第j天需要的衣服,那么对于第i天,如果考虑后面没有和它重复的话,那么dp[i][j]=dp[i+1][j]+1,如果存在某一天a[i]==a[k],dp[i][j]=......
  • P1425 小鱼的游泳时间
    小鱼的游泳时间题目描述伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按小时制计算),它发现自己从时分一直游泳到当天的时分,请你帮小鱼计算一下,它这天一共......
  • 202306112142-《最近开发心得...》
     没有心得就是在瞎搞,写心得就是“埋头耕耕,抬头看看”,看看自己做了什么......    心得就是心的感受,并非得到了什么,我以前是搞前端开发,仅仅4-5年时间,见证Angular市场份额的减少,backbone还嫌有耳闻,鲜有招聘;React框架从耳闻到霸屏;个人沐浴jquery的春风,枯于市场类似Vue......