leetcode 42.接雨水,leetcode 503. 下一个更大元素Ⅱ

news2025/8/7 9:23:00

“即使到不了远方,心中也要有远方的模样。”

文章目录

    • 1.leetcode 503. 下一个更大元素Ⅱ
        • 1.1 详细思路及步骤
        • 1.2 java版代码示例
    • 2.leetcode 42.接雨水
        • 2.1 详细思路及步骤
        • 2.2 java版代码示例

1.leetcode 503. 下一个更大元素Ⅱ

在这里插入图片描述

1.1 详细思路及步骤

  这题基本上和昨天总结的两个题思路是一模一样的,区别不同的就是,这是一个循环数组,那就直接将两个数组链接就好了。昨天的–>点这里

1.2 java版代码示例

class Solution {
    public int[] nextGreaterElements(int[] nums) {
      int len=nums.length;
      int[] result=new int[len];
      if(nums == null || nums.length<=1)return new int[]{-1};
      Arrays.fill(result,-1);
      Deque<Integer> stack = new LinkedList<Integer>();//用Deque也能做单调栈
       // Stack<Integer> stack= new Stack<>();
    //   stack.push(0);
      for(int i=0;i<len*2-1;i++){
          while(!stack.isEmpty()&&(nums[i%len]>nums[stack.peek()])){
            result[stack.pop()]=nums[i%len];
          }
          stack.push(i%len);
    }
    return result;
}
}

2.leetcode 42.接雨水

在这里插入图片描述

2.1 详细思路及步骤

  这题首先拿着可能不好分析,那么就先光看局部,从局部分析,判断i位置能接的雨水就找到i位置右边和左边的最大值,然后比较这俩最大值的最小值,也就是i位置能装的水就是Math.min(left_max,right_max)-height[i]

然后先看暴力解法

class Solution {
    public int trap(int[] height) {
       int len=height.length;
       int res=0;
       for(int i=0;i<len;i++){
           int l_max=0,r_max=0;
           //求i右边的最大值
           for(int j=i;j<len;j++){
               l_max=Math.max(l_max,height[j]);
           }
           //求i左边的最大值
           for(int j=i;j>=0;j--){
               r_max=Math.max(r_max,height[j]);
           }
           res+=Math.min(l_max,r_max)-height[i];
       }  
       return res;
    }
}

  根据暴力解法继续优化,上面的每次遍历i都会将i左边和右边的最大值遍历出来,其实也可以先将这俩遍历存储到数组中,然后直接用。

优化过程

class Solution {
    public int trap(int[] height) {
    if (height.length == 0) {
        return 0;
    }
    int n = height.length;
    int res = 0;
    // 数组充当备忘录
    int[] l_max = new int[n];
    int[] r_max = new int[n];
    // 初始化 base case
    l_max[0] = height[0];
    r_max[n - 1] = height[n - 1];
    // 从左向右计算 l_max
    for (int i = 1; i < n; i++)
        l_max[i] = Math.max(height[i], l_max[i - 1]);
    // 从右向左计算 r_max
    for (int i = n - 2; i >= 0; i--)
        r_max[i] = Math.max(height[i], r_max[i + 1]);
    // 计算答案
    for (int i = 1; i < n - 1; i++)
        res += Math.min(l_max[i], r_max[i]) - height[i];
    return res;
    }
}

  还有一种更优的解法就是双指针解法,思路基本上和上面一样,边遍历边找最大值,代码放下面。

2.2 java版代码示例

class Solution {
    public int trap(int[] height) {
    if (height.length == 0) {
        return 0;
    }
    //int n = height.length;
    int res = 0;
    int l_max=0,r_max=0;
    int left=0,right=height.length-1;
   while(left<right){
       l_max=Math.max(l_max,height[left]);
       r_max=Math.max(r_max,height[right]);
       if(l_max<r_max){
           res+=l_max-height[left];
           left++;
       }else{
           res+=r_max-height[right];
           right--;
       }
   }
    return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GoWeb从无到有(读取配置文件、gin、gorm)

GoWeb从无到有 – 读取配置文件、gin、gorm 创建go项目&#xff0c;结构如下 1. golang读取配置文件 引入包 go get -u gopkg.in/ini.v1在main.go的同级目录创建config文件夹&#xff0c;在文件夹中创建配置文件 config.ini # 项目配置 [app] Port8010 # mysql配置 [mysql] …

C++初阶 Stack和Queue的介绍和使用

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;本篇博客会简单的介绍STL中的栈和队列 本章目标 复习下栈这种数据结构特点知道怎么使用STL中的栈复习下队列这种数据结构的特点知道怎么使用STL中…

多功能螯合剂FAPI-04-NH2,FAPI04-氨基,含有DOTA配体显示出良好的药代动力学

NH2-FAPI-04产品描述&#xff1a; FAPI是FAP的特异性抑制剂。在这些FAPI中&#xff0c;含有DOTA配体(FAPI-04)的[68Ga]Ga-DOTA-FAPI-04 PET/CT能显示出良好的体内药代动力学&#xff0c;导致快速kidney​清除和注射后10分钟至3小时的低背景活性。不久之后&#xff0c;[68Ga]Ga-…

Mybatis+Mybatis-plus+SpringBoot整合(完整版)

文章目录一、Mybatis&#xff08;一&#xff09;Mybatis简介1、Mybatis历史2、Mybatis特性3、Mybatis下载4、和其它持久化层技术对比&#xff08;二&#xff09;搭建Mybatis1、MySQL不同版本的注意事项2、创建Maven工程1、引入依赖3、创建MyBatis的核心配置文件3.1、核心配置文…

SpringMVC学习笔记

目录 SpringMVC 为什么出现了SpringMVC? 什么是SpringMVC? 简单使用 SpringMVC工作流程 设置bean加载控制 在服务器启动时加载SpringConfig 后台接受五种类型参数传递 REST风格 描述 RESTful入门 新建以下目录 实体类 控制器 统一异常处理 新建Code类用于记…

c#反序列化json

语句&#xff1a;JsonConvert.DeserializeObject(json); json字符串&#xff1a; [ { "id": "130000", "cityList": [ { "cityList": [ { …

Linux root用户忘记密码的恢复方法

日常运维工作中可能会遇到服务器忘记root密码的问题&#xff0c;本次以红帽8为例&#xff0c;讲解在忘记root密码后如何绕过密码登录然后重新设置密码的办法 目录 准备工作 问题复现 启动并进入引导 进入修复模式 修改用户密码文件 重置密码 准备工作 下载与系统匹配的…

Python编程 元组的创建

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.元组知识点 二.元组(tuple) 1.元组介绍(掌握) 2.元组创建(掌握) 3.…

第十四届蓝桥杯校模拟赛-编程大题详解+代码(二)

前言&#xff1a;这几天有不少小伙伴催促我尽快更新后五道编程题题解&#xff0c;然鄙人实在水平有限&#xff0c;实事求是&#xff0c;能力不足&#xff0c;不堪众望。思索良久&#xff0c;第九题有解题思路且已完成部分解题&#xff0c;但未完全完成&#xff0c;第十题尚未有…

python 数据挖掘与机器学习核心技术

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…

《FFmpeg Basics》中文版-11-格式之间转换

正文 ffmpeg工具的最常见用法是从一种音频或视频格式转换为另一种相关的格式。 格式参数在输出文件之前由-f选项设置&#xff0c;或者在输入文件之前也有原始输入&#xff0c;具体的可用格式信息在[显示帮助和功能]一章中列出来了。 多媒体格式介绍 文件格式 媒体格式是能够…

OpenSSH移植到Linux开发板

OpenSSH移植到Linux开发板 文章目录OpenSSH移植到Linux开发板前言一、移植zlib库二、 移植openssl库三、 移植openssh库1. 在开发板中创建目录2. 将文件拷贝到对应目录下3. 创建对应软连接4. 开发板上生成密钥文件5. 开启SSH前言 在Linux开发中&#xff0c;有时候需要远程登录…

BLE学习(2):广播包报文格式详解

文章目录1 广播通道2 广播包参考手册&#xff1a; BLUETOOTH SPECIFICATION Version 5.0为了能够充分理解蓝牙的广播&#xff0c;我们先了解一下BLE架构的GAP(Generic Access Profile)层。 GAP层提供决定蓝牙设备之间如何交互的框架&#xff0c;包括&#xff1a; 蓝牙设备的角…

PHP 底层的运行机制和工作原理

阅读目录阐述一、PHP的设计理念及特点PHP 为什么没有多线程&#xff1f;1、PHP 与多线程2、PHP是单线程&#xff0c;多进程模型3、 php为什么选择多进程&#xff0c;而不是多线程4、场景二、PHP 四层体系1、上层应用2、Sapi3、Extensions&#xff08;扩展&#xff09;4、Zend 引…

【目标检测】Fast R-CNN论文详细解读

目录&#xff1a;Fast R-CNN论文解读一、前言1. R-CNN的步骤及缺点2. SPP Net的步骤二、Fast R-CNN1. R-CNN的缺点2. SPPNet的缺点3. Fast R-CNN的优点4. Fast R-CNN的模型结构和训练流程5. 初始化预训练网络结构6. 微调7. 多任务损失函数8. ROI层的反向传播9. SGD超参数选择10…

Java后端面试到底要如何准备?

我把面试准备拆成以下几个步骤&#xff1a; 1.写简历 2.整理好自己最熟悉的项目&#xff0c;相对有代表性的项目。 3.整理自己的技术栈 4.收拾好自己的自我介绍 5.被八股文 6.模拟面试 7.针对模拟面试表现出来的问题进行改进 8.开始投投简历 本人 10 年开发经验&#…

jsp课程设计管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程设计管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

单片机毕业设计 stm32智能手环

文章目录1 简介1 项目背景意义2 系统方案的设计3 系统总体结构4 系统硬件设计4.1 主控模块4.2 姿态解算模块&#xff1a;MPU60504.3 DS3231实物图4.4 TFT显示模块4.5 硬件连接效果5 跌倒检测算法原理5.1 跌倒检测的判定流程5.2 关键算法实现1 简介 &#x1f525; Hi&#xff0…

CIPU落地专有云:是“小众需求”还是“机会之门”?

2022 年 11 月&#xff0c;云栖大会主论坛&#xff0c;阿里巴巴集团副总裁、阿里云智能基础产品事业部负责人蒋江伟分享了阿里云专有云的一项新进展 —— CIPU 落地飞天企业版。在分析师峰会上&#xff0c;阿里巴巴集团研究员、阿里云专有云总经理刘国华也向分析师们详细介绍了…

双一流高校全球通邮经验:Coremail安全海外中继提升科研效率

在这个“后疫情时代”&#xff0c;高校间的国际交流合作更应架起桥梁&#xff0c;承担起文明交流互鉴的责任&#xff0c;邮件往来交流作为学术交流的重要工具&#xff0c;保障全球高校学术交流安全畅通&#xff0c;是Coremail针对高校教育邮件服务的重点之一。 针对高校行业面临…