【LeetCode:699. 掉落的方块 + 线段树】

【线段树】699. 掉落的方块 在二维平面上的 x 轴上,放置着一些方块。 给你一个二维整数数组 positions ,其中 positions[i] = [lefti, sideLengthi] 表示:第 i 个方块边长为 sideLengthi ,其左侧边与 x 轴上坐标点 lefti 对齐。 每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上 。一个方块仅仅是擦过另一个方块的左侧边或右侧边不算着陆。一旦着陆,它就会固定在原地,无法移动。 在每个方块 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

在二维平面上的 x 轴上,放置着一些方块。

给你一个二维整数数组 positions ,其中 positions[i] = [lefti, sideLengthi] 表示:第 i 个方块边长为 sideLengthi ,其左侧边与 x 轴上坐标点 lefti 对齐。

每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上 。一个方块仅仅是擦过另一个方块的左侧边或右侧边不算着陆。一旦着陆,它就会固定在原地,无法移动。

在每个方块掉落后,你必须记录目前所有已经落稳的 方块堆叠的最高高度 。

返回一个整数数组 ans ,其中 ans[i] 表示在第 i 块方块掉落后堆叠的最高高度。

示例 1:

输入:positions = [[1,2],[2,3],[6,1]]
输出:[2,5,5]
解释:
第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 2 。
第 2 个方块掉落后,最高的堆叠由方块 1 和 2 组成,堆叠的最高高度为 5 。
第 3 个方块掉落后,最高的堆叠仍然由方块 1 和 2 组成,堆叠的最高高度为 5 。
因此,返回 [2, 5, 5] 作为答案。
示例 2:

输入:positions = [[100,100],[200,100]]
输出:[100,100]
解释:
第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 100 。
第 2 个方块掉落后,最高的堆叠可以由方块 1 组成也可以由方块 2 组成,堆叠的最高高度为 100 。
因此,返回 [100, 100] 作为答案。
注意,方块 2 擦过方块 1 的右侧边,但不会算作在方块 1 上着陆。

提示:

1 <= positions.length <= 1000
1 <= lefti <= 108
1 <= sideLengthi <= 106

🌟 求解思路&实现代码&运行结果


⚡ 线段树

🥦 求解思路
  1. 该题目涉及到区间的增加、更新、查询最大值的操作,我们递归线段树来直接求解即可。
  2. 有了线段树,题目会非常简单,关键在于掌握线段树知识,线段树的具体内容可以参考题解:【宫水三叶】线段树(动态开点)的两种方式
  3. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {

    class Node {
        int ls, rs, add, max;
    }
    int N = (int)1e9, M = 1000010, cnt = 0;
    Node[] tr = new Node[M];
    void update(int u, int lc, int rc, int l, int r, int v) {
        if (l <= lc && rc <= r) {
            tr[u].add = v;
            tr[u].max = v;
            return ;
        }
        lazyCreate(u);
        pushdown(u);
        int mid = lc + rc >> 1;
        if (l <= mid) update(tr[u].ls, lc, mid, l, r, v);
        if (r > mid) update(tr[u].rs, mid + 1, rc, l, r, v);
        pushup(u);
    }
    int query(int u, int lc, int rc, int l, int r) {
        if (l <= lc && rc <= r) return tr[u].max;
        lazyCreate(u);
        pushdown(u);
        int mid = lc + rc >> 1, ans = 0;
        if (l <= mid) ans = Math.max(ans, query(tr[u].ls, lc, mid, l, r));
        if (r > mid) ans = Math.max(ans, query(tr[u].rs, mid + 1, rc, l, r));
        return ans;
    }
    void lazyCreate(int u) {
        if (tr[u] == null) tr[u] = new Node();
        if (tr[u].ls == 0) {
            tr[u].ls = ++cnt;
            tr[tr[u].ls] = new Node();
        }
        if (tr[u].rs == 0) {
            tr[u].rs = ++cnt;
            tr[tr[u].rs] = new Node();
        }
    }
    void pushup(int u) {
        tr[u].max = Math.max(tr[tr[u].ls].max, tr[tr[u].rs].max);
    }
    void pushdown(int u) {
        if(tr[u].add==0) return;
        tr[tr[u].ls].add = tr[u].add; tr[tr[u].rs].add = tr[u].add;
        tr[tr[u].ls].max = tr[u].add; tr[tr[u].rs].max = tr[u].add;
        tr[u].add = 0;
    }


    public List<Integer> fallingSquares(int[][] ps) {
        List<Integer> ans = new ArrayList<>();
        tr[1] = new Node();
        for (int[] info : ps) {
            int x = info[0], h = info[1], cur = query(1, 1, N, x, x + h - 1);
            update(1, 1, N, x, x + h - 1, cur + h);
            ans.add(tr[1].max);
        }
        return ans;
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

从公式到实践:用SPSS解锁香农多样性指数的生态洞察 本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。 阅读详情

相关推荐

QT-使用ECharts显示地图,还有更多惊艳的图表等待你的使用

QT-使用ECharts显示地图前言一、使用步骤1.下载示例2. QT使用HTML文件配置3.使用HTML文件4. 数据交互及自适应总结注意:这个地图是百度的在线地图,需要百度API密钥和在联网的状态下使用。离线使用图表 前言 我上文QT图表chart-饼状图,使用qt自带的图表库charts来显示图表,实现数据可视化,但是QT自带的图表库显示效果并不佳,通俗说,就是不好看。 然而,有这么一个开源图表库,图表种类极多,并且效果良好,能够实现具有很好的视觉冲击的数据可视化。 它就是Apache ECharts

博咯的博客 4896

leetcode 699. 掉落的方块(java)

第 2 个方块掉落后,最高的堆叠可以由方块 1 组成也可以由方块 2 组成,堆叠的最高高度为 100。第 3 个方块掉落后,最高的堆叠仍然由方块 1 和 2 组成,堆叠的最高高度为 5。第 2 个方块掉落后,最高的堆叠由方块 1 和 2 组成,堆叠的最高高度为 5。第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 100。第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 2。输入:positions = [[1,2],[2,3],[6,1]]

SP_1024的博客 359

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 288

leetcode:699. 掉落的方块

给你一些数,组成一个序列,如[1 4 2 3],有两种操作一个朴素的算法:此时:Query最大值复杂度O(N), 修改复杂度为O(1)怎么优化呢?一颗线段树的构造是根据区间的性质来构造的,比如下面是一颗区间[0, 3]的线段树,每个[start, end]都是一个二叉树中的节点。 区间划分大概就是上述的区间划分。可以看出每次都将区间的长度一分为二,数列长度为n,所以线段树的高度是log(n)上述的区间存储的只是区间的左右边界。我们可以将区间的最大值加入进来,也就是树中的Node需要存储left,right左

OceanStar的博客 417

案例分析|一篇文章带你看懂养鸡场智慧管理系统

养鸡场智慧管理系统是为了满足现代化养鸡业对精细化管理的需求而设计的一款专业软件。随着科技的发展和农业产业的升级,传统的手工记录和管理方式已无法满足高效、准确和实时的数据跟踪需求。本软件旨在通过集成各种功能模块,帮助养鸡场主实现从鸡苗孵化、饲养管理、饲料控制到销售结算等全链条的智能化操作。该系统的核心目标是提升养鸡场的运营效率和盈利能力,通过自动化数据处理,减少人工误差,节省时间和精力。例如,孵化报表和记录模块可以帮助管理者实时监控孵化过程,及时调整策略;

muyu2980的专栏 930

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战

本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。

weixin_42632434的博客 280

【LeetCode】一文吃透线段树(附例题)

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点,对于线段树中的每一个非叶子节点 [a, b], 它的左儿子表示的区间为 [a, (a+b)/2], 右儿子表示的区间为 [(a+b)/2+1, b]。因此线段树是平衡二叉树,最后的子节点数目为 N,即为整个线段区间的长度。使用线段树可以快速的查找一个节点在若干条线段中出现的次数,时间复杂度为 O(logN),而未优化的空间复杂度为 2N,因此有时需要离散化让空间压缩。.................

像我这样的人 3661

2024年最全scrapy+scrapyd+gerapy 爬虫调度框架,字节跳动面试时间

scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们方便地控制爬虫运行直观地查看爬虫状态实时地查看爬取结果简单地实现项目部署统一地实现主机管理轻松地编写爬虫代码。

2401_84140653的博客 1200

JAVA程序设计:掉落的方块(LeetCode:699)

在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。 第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其中left 表示该方块最左边的点位置(positions[i][0]),side_length 表示该方块的边长(positions[i][1])。 每个方块的底部边缘平行于数轴(即 x 轴),并且从一个比目前所有的...

信仰.的博客 657

Zabbix故障排查10051端口无法启动:zabbix-server.service: main process exited, code=exited, status=1/FAILURE

zabbix-server.service: main process exited, code=exited, status=1/FAILURE报错说与数据库失去连接。

" DevOps菜鸟(Xu JieHao)" 的博客 2255

QML 果冻抖动:用 Scale 动画模拟 Q 弹反馈

介绍果冻抖动效果:点击后卡片通过多段 ParallelAnimation 实现 Scale X/Y 反向缩放和逐步衰减,模拟果冻弹性形变;进阶版本加入小幅 Rotation 增加活泼感,适合游戏、儿童应用等趣味反馈场景。

u011186532的专栏 423

【算法随笔:线段树 Segment tree】(多操作 | leetcode例题)

分析线段树,并且一般在算法题中出现。线段树线段树具有,当然动态树也可以,改天更新线段树处理非常强大,很少有别的数据结构能与之媲美线段树进阶操作还有等,这些扩展持续学习中,改日更新DSA模板(静态数组、侵入式)线段树经典应用。

RFoer的博客 1065

上位机介绍:C# 开发者的必知基础

上位机是指在工业控制系统中,位于上层、负责人机交互和数据管理的计算机/软件,与“下位机”(PLC、传感器、变频器、单片机等硬件设备)相对应,核心是“向下通信控制设备,向上展示交互数据”。下位机:一线干活的“工人”(执行采集、控制指令);上位机:指挥管理的“办公室人员”(发指令、看数据、做报表)。C#开发者掌握上位机开发的核心是“通信+UI+稳定性基础层:搞懂WinForms/WPF基础、串口/Modbus通信,能实现核心功能;进阶层:掌握分层设计、异步编程、工业级容错(断线重连、数据校验);

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1558

算法41:掉落的方块(力扣699题)----线段树

线段树、离散化技巧、懒更新

街头小瘪三的专栏 1743

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

六月集训(24)线段树

线段树

m0_67739923的博客 190

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

DeepSeek LeetCode 699. 掉落的方块 public List<Integer> fallingSquares(int[][] positions)

核心问题:每个方块掉落后,需要找到它下面重叠方块的最大高度关键点方块用区间 [left, right] 表示高度需要叠加计算需要实时记录全局最大高度解法对比解法时间复杂度空间复杂度优点缺点模拟法O(n²)O(n)实现简单大数据集性能差有序集合O(n log n)O(n)性能较好实现较复杂线段树O(n log n)O(n)理论最优实现最复杂优化模拟O(n²)O(n)易理解性能差。

m0_37843156的博客 105

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

力扣(leetcode)每日一题 699 掉落的方块 | 线段树|经典

还是去网上找视频看把,这个真不好解释首先正放心 4,6 会落在4,6和10,6的位置,但是10,6的位置是没有支点的,也就是用不了的。因为这时候10位置来了方块,是无法累加上去的然后这里不能记录4,6 5,6 6,6 7,6 8,6 9,6 这里需要对点进行map的压缩。这样只要头尾的点就可以了。也就是你会有很多点 数值很大 100,10000,555555,666666,666669但是会通过hash映射到 1,2,3,4,5上。非常的紧凑。

ganjiee0007的博客 485

LeetCode动画 | 699.掉落的方块

今天分享一个LeetCode题,题号是699,标题是掉落的方块,题目标签是线段树,题目难度是困难。 这篇文章写着写着,篇幅就变得有点长了,但是这对你很有帮助,因为我在写Java代码过程中进行了两步优化,过程都写下来了。 后面也会贴Go语言代码,记得收哦,简单对比了Java和Go语言的执行分析,对学习Go语言有好处的。 题目描述 在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块...

zoukeqing的博客 1132

线段树基础入门day2

线段树的维护对象的转化 力扣leetcode 699.掉落的方块 falling-squares 线段树

2301_80085990的博客 387

Java实现 LeetCode 699 掉落的方块(线段树?)

699. 掉落的方块 在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块。 第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其中 left 表示该方块最左边的点位置(positions[i][0]),side_length 表示该方块的边长(positions[i][1])。 每个方块的底部边缘平行于数轴(即 x 轴),并且...

南 墙 1万+

[LeetCode解题报告] 699. 掉落的方块

用线段树把复杂度降到nlogn

liuliangcan的博客 437

【LeetCode】699. 掉落的方块

699. 掉落的方块题目大意思路代码复杂度 原题链接:699. 掉落的方块 题目大意 在二维平面上的 x 轴上,放置着一些方块。 给你一个二维整数数组 positions ,其中 positions[i] = [lefti, sideLengthi] 表示:第i个方块边长为sideLengthi,其左侧边与 x 轴上坐标点 lefti 对齐。 每个方块都从一个比目前所有的落地方块更高的高度掉落而下。方块沿 y 轴负方向下落,直到着陆到 另一个正方形的顶边 或者是 x 轴上 。一个方块仅仅是擦过另一个方块的左

QAQwhq的博客 336

【LeetCode】掉落的方块 [H](线段树)

LeetCode 699:想象一下标准的俄罗斯方块游戏,X轴是积木最终下落到底的轴线。 下面是这个游戏的简化版: 1. 只会下落正方形积木 2. [a,b] -> 代表一个边长为b的正方形积木,积木左边缘沿着X = a这条线从上方掉落 3. 认为整个X轴都可能接住积木,也就是说简化版游戏是没有整体的左右边界的 4. 没有整体的左右边界,所以简化版游戏不会消除积木,因为不会有哪一层被填满 给定一个N*2的二维数组matrix,可以代表N个积木依次掉落,返回每一次掉落之后的最大高度。使用线段树求解。

小七的博客 524

力扣 leetcode 699.掉落的方块(线段树&离散化)

力扣 leetcode 699.掉落的方块(线段树&离散化)

2301_80085990的博客 488

【Leetcode】699. Falling Squares 699. 掉落的方块

解法 要说难其实也不难……O(n2)O(n^2)O(n2)的方法都可以过 解法一:暴力 每放下一个方块,记录一下放下后这个方块顶端高度,它由两部分组成:一是方块自己的高度,二是以前放下的与该方块相交的方块的顶端高度的最大值,由这两部分相加构成 得到每个方块放下时的顶端高度之后,最后的ans数组就是这个高度数组的前缀最大值数组 class Solution(object): def f...

lemonmillie的博客 672
上一篇: 【LeetCode:3106. 满足距离约束且字典序最小的字符串 + 贪心】
下一篇: 【LeetCode:682. 棒球比赛 + 模拟】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值