代码随想录 | Day61 and 62

news2024/12/26 12:46:06

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 今日学习目标
  • 一、算法题
    • 1.下一个更大元素 II
    • 2.接雨水
    • 3.柱状图中最大的矩形
  • 今日心得
  • 学习及参考书籍


今日学习目标

下一个更大元素 II(503)
接雨水(42)
柱状图中最大的矩形(84)

一、算法题

1.下一个更大元素 II

题目:
给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

示例 1:

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

代码:

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int> result(nums.size(), -1);
        if (nums.size() == 0) return result;
        stack<int> st;
        st.push(0);
        for (int i = 1; i < nums.size() * 2; i++) { 
            // 模拟遍历两边nums,注意一下都是用i % nums.size()来操作
            if (nums[i % nums.size()] < nums[st.top()]) st.push(i % nums.size());
            else if (nums[i % nums.size()] == nums[st.top()]) st.push(i % nums.size()); 
            else {
                while (!st.empty() && nums[i % nums.size()] > nums[st.top()]) {
                    result[st.top()] = nums[i % nums.size()];
                    st.pop();
                }
                st.push(i % nums.size());
            }
        }
        return result;
    }
};

2.接雨水

题目:
给定 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 个单位的雨水(蓝色部分表示雨水)。

代码:

class Solution {
public:
    int trap(vector<int>& height) {
        if (height.size() <= 2) return 0; // 可以不加
        stack<int> st; // 存着下标,计算的时候用下标对应的柱子高度
        st.push(0);
        int sum = 0;
        for (int i = 1; i < height.size(); i++) {
            if (height[i] < height[st.top()]) {     // 情况一
                st.push(i);
            } if (height[i] == height[st.top()]) {  // 情况二
                st.pop(); // 其实这一句可以不加,效果是一样的,但处理相同的情况的思路却变了。
                st.push(i);
            } else {                                // 情况三
                while (!st.empty() && height[i] > height[st.top()]) { // 注意这里是while
                    int mid = st.top();
                    st.pop();
                    if (!st.empty()) {
                        int h = min(height[st.top()], height[i]) - height[mid];
                        int w = i - st.top() - 1; // 注意减一,只求中间宽度
                        sum += h * w;
                    }
                }
                st.push(i);
            }
        }
        return sum;
    }
};

3.柱状图中最大的矩形

题目:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:
在这里插入图片描述

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

代码:

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int result = 0;
        stack<int> st;
        heights.insert(heights.begin(), 0); // 数组头部加入元素0
        heights.push_back(0); // 数组尾部加入元素0
        st.push(0);

        // 第一个元素已经入栈,从下标1开始
        for (int i = 1; i < heights.size(); i++) {
            if (heights[i] > heights[st.top()]) { // 情况一
                st.push(i);
            } else if (heights[i] == heights[st.top()]) { // 情况二
                st.pop(); // 这个可以加,可以不加,效果一样,思路不同
                st.push(i);
            } else { // 情况三
                while (!st.empty() && heights[i] < heights[st.top()]) { // 注意是while
                    int mid = st.top();
                    st.pop();
                    if (!st.empty()) {
                        int left = st.top();
                        int right = i;
                        int w = right - left - 1;
                        int h = heights[mid];
                        result = max(result, w * h);
                    }
                }
                st.push(i);
            }
        }
        return result;
    }
};

今日心得

比想象中的难。

学习及参考书籍

代码随想录

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

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

相关文章

InstructionGPT

之前是写在[LLM&#xff1a;提示学习Prompt Learning]里的&#xff0c;抽出来单独讲一下。 基本原理 InstructGPT/ChatGPT都是采用了GPT-3的网络结构&#xff0c;通过指示学习构建训练样本来训练一个反应预测内容效果的奖励模型&#xff08;RM&#xff09;&#xff0c;最后通过…

轻松批量剪辑:将MP4视频转换为FLV格式

在视频制作和编辑领域&#xff0c;批量剪辑和格式转换是非常常见的操作。将MP4视频转换为FLV格式&#xff0c;可以帮助我们更好地管理和发布视频内容。本文将介绍云炫AI智剪如何轻松批量剪辑&#xff0c;将MP4视频转换为FLV格式&#xff0c;帮助您提高工作效率&#xff0c;减少…

避雷!又有2本期刊被标记“On Hold”!含中科院2区(TOP),共8本有风险!

期刊动态&#xff1a;新增2本期刊“On Hold” 最新&#xff0c;又有2本期刊被科睿唯安标记为「On Hold」&#xff01;这2本期刊分别为MIGRATION LETTERS和REVISTA DE GESTAO E SECRETARIADO-GESEC。 目前科睿唯安官网&#xff1a;共有8本期刊被标记为「On Hold」&#xff0c;…

极盾故事|某头部私募基金“扩展检测响应XDR平台”建设

极盾科技助力某头部私募基金&#xff0c;基于极盾析策&#xff0c;打造扩展检测响应XDR平台&#xff1a; 1、接入堡垒机、网关、Gitlab、资产类接口、登录数据源、运维网络设备等日志&#xff0c;实现日均十亿级别数据量分析&#xff0c;日均安全告警数量从数万降至100条左右&a…

【大数据】Hadoop环境搭建及运行

Hadoop概述 Hadoop 是一个由 Apache 基金会所开发的 分布式系统基础架构 。主要解决&#xff0c;海量数据的 存储 和海量数据的 分析计算 问题。广义上来说&#xff0c; Hadoop 通常是指一个更广泛的概念 —— Hadoop 生态圈 。 Hadoop优势 高可靠性&#xff1a;Hadoop底层维…

使用Jetpack Compose构建Flappy Musketeer街机游戏

使用Jetpack Compose构建Flappy Musketeer街机游戏 一步一步创建沉浸式移动游戏的指南 引言 Flappy Musketeer不仅是又一个移动游戏&#xff1b;它将令人上瘾的“轻点飞行”游戏玩法和引人入胜的视觉效果融合在一起&#xff0c;吸引玩家进入埃隆马斯克&#xff08;Elon Musk…

大数据-Storm流式框架(三)--Storm搭建教程

一、两种搭建方式 1、storm单节点搭建 2、完全分布式搭建 二、storm单节点搭建 准备 下载地址&#xff1a;Index of /dist/storm 1、环境准备&#xff1a; Java 6 Python 2.6.6 2、上传、解压安装包 3、在storm目录中创建logs目录 mkdir logs 启动 ./storm help …

机器人学导论-约翰 J.克雷格

目录 第五章 雅可比&#xff1a;速度和静力 5.1 刚体的线速度和角速度5.5 机器人连杆运动 第五章 雅可比&#xff1a;速度和静力 5.1 刚体的线速度和角速度 \(V_{BORG}\)是坐标系B在A坐标系下的速度&#xff0c;\(^BV_Q\)是B坐标系下Q的速度&#xff0c;\(^A\Omega\)表示从坐标…

数据分析案例-某公司员工数据信息可视化(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

打印机连接网络后怎么安装驱动?

打印机在我们办公和生活中算是比较常见的设备&#xff0c;特别是在上班时需要时常打印各种文件&#xff0c;但是有时电脑上的打印机也会有无法打印的问题&#xff0c;或者新买的打印机需要先安装驱动才能正常打印的。 那么这个时候我们需要先检查电脑上的打印机是否有安装驱动&…

uniapp开发h5 监听用户物理返回键 类似拼多多返回后弹窗

uniapp有个onBackPress生命周期 但是h5中只能监听到navbarr左边的返回按钮以及uni.navigateBack() 方法 h5既然监听不到物理返回键&#xff0c;那么用户点击了物理返回键自然会路由返回上一页&#xff0c;那么我们监听路由&#xff0c;由于路由是uni自己封装的&#xff0c;我测…

3D模型格式转换工具HOOPS Exchange:支持国际标准STEP格式!

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速将可靠的2D和3D CAD导入和导出添加到其应用程序中&#xff0c;访问广泛的数据&#xff0c;包括边界表示 (B-REP)、产品制造信息 (PMI)、模型树、视图、持久 ID、样式、构造几何、可视化等&#xff0c;无需依赖任…

易点易动:引入二维码和移动技术,助力企业高效进行固定资产盘点

固定资产是企业重要的财务资源&#xff0c;而高效准确地进行海量固定资产盘点一直是企业管理的挑战。为了解决这一问题&#xff0c;易点易动固定资产管理系统引入了先进的二维码和移动技术。本文将详细介绍易点易动固定资产管理系统的二维码和移动技术&#xff0c;展示如何借助…

深度学习入门:一篇概述深度学习的文章

文章目录 &#x1f31f; 特征工程&#xff1a;推荐系统有哪些可供利用的特征&#xff1f;&#x1f34a; 1. 用户特征&#x1f34a; 2. 商品特征&#x1f34a; 3. 上下文特征&#x1f34a; 4. 社交特征&#x1f34a; 5. 行为特征 &#x1f31f; 特征处理&#xff1a;如何利用Spa…

【C++】list的介绍及使用 | 模拟实现list(万字详解)

目录 一、list的介绍及使用 什么是list&#xff1f; list的基本操作 增删查改 获取list元素 不常见操作的使用说明 ​编辑 接合splice ​编辑 移除remove 去重unique 二、模拟实现list 大框架 构造函数 尾插push_back 迭代器__list_iterator list的迭代器要如何…

Java八股文 ---Java并发篇

线程安全 线程安全就是多个线程去执行某类&#xff0c;这个类始终能表现出正确的行为&#xff0c;那么这个类就是线程安全的 我们判断是否要处理线程安全问题&#xff0c;就看有没有多个线程同时访问一个共享变量 能不能保证操作的原子性&#xff0c;考虑atomic包下的类够不够我…

DASCTF X CBCTF 2023

一、justpaint 1.先是压缩包密码爆破&#xff0c;密码为11452&#xff0c;然后开始代码审计&#xff0c;发现是一个线性的神经网络。 源代码如下&#xff1a; import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from PIL import Ima…

JVM重点

文章目录 0. 运行流程1. 内存区域划分1.1 堆1.2 Java 虚拟机栈1.3 程序计数器1.4 方法区 2. 类加载机制类加载过程2.1 加载2.2 验证2.3 准备2.4 解析2.5 初始化双亲委派模型 3. 垃圾回收机制3.1 垃圾判断算法3.1.1 引用计数算法3.1.2 可达性分析算法 3.2 垃圾回收算法3.2.1 标记…

01 # 手写 new 的原理

new 做了什么? 在构造器内部创建一个新的对象这个对象内部的隐式原型指向该构造函数的显式原型让构造器中的 this 指向这个对象执行构造器中的代码如果构造器中没有返回对象&#xff0c;则返回上面的创建出来的对象 手写 new 的过程 new 是一个运算符&#xff0c;只能通过函…

Redis Cluster高可用集群原理

目录 一、Redis Cluster和哨兵对比二、槽位定位算法三、集群节点间的通信机制四、集群选举原理五、网络抖动六、Redis集群为什么至少需要三个master节点&#xff0c;并且推荐节点数为奇数&#xff1f;七、集群没有过半机制会出现脑裂数据丢失问题八、跳转重定位九、集群对批量操…