LeetCode 699. Falling Squares 掉落的方块 (Java)
题目:
On an infinite number line (x-axis), we drop given squares in the order they are given.
The i-th square dropped (positions[i] = (left, side_length)) is a square with the left-most point being positions[i][0] and sidelength positions[i][1].
The square is dropped with the bottom edge parallel to the number line, and from a higher height than all currently landed squares. We wait for each square to stick before dropping the next.
The squares are infinitely sticky on their bottom edge, and will remain fixed to any positive length surface they touch (either the number line or another square). Squares dropped adjacent to each other will not stick together prematurely.
Return a list ans of heights. Each height ans[i] represents the current highest height of any square we have dropped, after dropping squares represented by positions[0], positions[1], ..., positions[i].
Example 1:
Input: [[1, 2], [2, 3], [6, 1]]
Output: [2, 5, 5]
Explanation:
After the first drop of positions[0] = [1, 2]: _aa _aa ------- The maximum height of any square is 2.
After the second drop of positions[1] = [2, 3]: __aaa __aaa __aaa _aa__ _aa__ -------------- The maximum height of any square is 5. The larger square stays on top of the smaller square despite where its center of gravity is, because squares are infinitely sticky on their bottom edge.
After the third drop of positions[1] = [6, 1]: __aaa __aaa __aaa _aa _aa___a -------------- The maximum height of any square is still 5. Thus, we return an answer of [2, 5, 5].
Example 2:
Input: [[100, 100], [200, 100]]
Output: [100, 100]
Explanation: Adjacent squares don't get stuck prematurely - only their bottom edge can stick to surfaces.
Note:
- 1 <= positions.length <= 1000.
- 1 <= positions[i][0] <= 10^8.
- 1 <= positions[i][1] <= 10^6.
分析:
简单来说这道题就是会在一个区域内掉落一些方块,给定掉落的起点和方块的边长,每掉落一个方块都要求得此时区域内最大的高度。
由于方块之间有可能会叠加起来,例如[2,2],[3,1],这种情况当第二个方块到来之后,由于叠加,最大高度就变成了3.
我们维护一个list,用来保存加入的方块所达到的最大高度,每新加入一个方块,就遍历list,找到和当前加入方块发生重叠的部分,计算重叠部分的最大高度,那么这个最大高度再加上方块的边长就是这个方块的最大高度了,再将这个方块的信息加入到list中,继续掉落方块即可。
程序:
class Solution {
    public List<Integer> fallingSquares(int[][] positions) {
        List<int[]> list = new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        int maxHeight = Integer.MIN_VALUE;
        for(int[] arr:positions){
            int start = arr[0];
            int end = arr[0] + arr[1];
            //int[] interval = new int[]{arr[0], arr[0]+arr[1], arr[1]}; //{start, end, height}
            int tempHeight = 0;
            for(int[] interval:list){
                if(end <= interval[0] || start >= interval[1])
                    continue;
                tempHeight = Math.max(tempHeight, interval[2]);
            }
            int height = tempHeight + arr[1];
            list.add(new int[]{start, end, height});
            maxHeight = Math.max(maxHeight, height);
            res.add(maxHeight);
        }
        return res;
    }
}
LeetCode 699. Falling Squares 掉落的方块 (Java)的更多相关文章
- leetcode 699. Falling Squares 线段树的实现
		线段树实现.很多细节值得品味 都在注释里面了 class SegTree: def __init__(self,N,query_fn,update_fn): self.tree=[0]*(2*N+2) ... 
- [LeetCode] Falling Squares 下落的方块
		On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ... 
- 【leetcode】699. Falling Squares
		题目如下: On an infinite number line (x-axis), we drop given squares in the order they are given. The i- ... 
- 699. Falling Squares
		On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ... 
- Java实现 LeetCode 699 掉落的方块(线段树?)
		699. 掉落的方块 在无限长的数轴(即 x 轴)上,我们根据给定的顺序放置对应的正方形方块. 第 i 个掉落的方块(positions[i] = (left, side_length))是正方形,其 ... 
- [Swift]LeetCode699. 掉落的方块 | Falling Squares
		On an infinite number line (x-axis), we drop given squares in the order they are given. The i-th squ ... 
- LeetCode高频题目(100)汇总-Java实现
		LeetCode高频题目(100)汇总-Java实现 LeetCode高频题目(100)汇总-Java实现 目录 第01-50题 [Leetcode-easy-1] Two Sum [Le ... 
- LeetCode 57. Insert Interval 插入区间 (C++/Java)
		题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ... 
- Falling Squares
		2020-01-08 10:16:37 一.Falling squares 问题描述: 问题求解: 本题其实也是一条经典的区间问题,对于区间问题,往往可以使用map来进行区间的维护操作. class ... 
- [LeetCode] Bricks Falling When Hit 碰撞时砖头掉落
		We have a grid of 1s and 0s; the 1s in a cell represent bricks. A brick will not drop if and only i ... 
随机推荐
- 鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)
			前言 动画是一种通过连续展示一系列静止的图像(称为帧)来创造出运动效果的艺术形式.它可以以手绘.计算机生成或其他各种形式呈现.在动画中,每一帧都具有微小的变化,当这些帧被快速播放时,人眼会产生视觉上的 ... 
- Spring 源码阅读(一)环境搭建
			注意事项: 使用 2024-03-14 发布的 Spring 5.3.33 版本 IDE 工具使用了 Intellij IDEA,同时为了简化不必要的内容没单独配置 Gradle 环境 JDK 版本采 ... 
- 龙蜥正式开源 SysOM:百万级实战经验打造!一站式运维管理平台 | 龙蜥技术
			简介:SysOM集监控.告警.诊断.修复.安全能力于一体的操作系统运维平台.  文/系统运维 SIG 如果你被突如其来的 OOPS 和满屏奇怪的函数弄得满头问号?机器内存明明很大,却申请不出来内存 ... 
- 基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案
			简介: Spark SQL 作为 Spark 用来处理结构化数据的一个基本模块,已经成为多数企业构建大数据应用的重要选择.但是,在大规模连接(Join).聚合(Aggregate)等工作负载下,Sp ... 
- [FAQ] 适用于 macOS / Arm64 (M1/M2) 的 VisualBox
			使用与 Windows.Linux.macOS 的x86架构的一般在下面地址中下载: Download VisualBox:https://www.virtualbox.org/wiki/Down ... 
- 为 RabbitMQ 服务器启用 SSL/TLS
			为 RabbitMQ 服务器启用 SSL/TLS 目录 为 RabbitMQ 服务器启用 SSL/TLS 为客户端和服务器生成自签名证书 在 RabbitMQ 服务器中启用 TLS/SSL 支持 使用 ... 
- ESP32 使用LVGL案例
			一.完成LVGL移植 在使用LVGL提供的测试案例时,需要先移植LVGL,不明白的小伙伴看我之前的笔记 esp-idf 移植 lvgl8.3.3. 移植完成后的项目文件如下图所示 二.添加需要的测试案 ... 
- 基于FPGA的音乐蜂鸣器设计
			蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备.电话机.定时器等电子产品中作发声器件. 图1 :蜂鸣器实物图 蜂鸣器主要分为压电 ... 
- leetcode(力扣) 2866. 美丽塔 II
			原题链接 暴力做法 (时间复杂度 O(n^2)) 每次选取下标 i 为峰值, 进行 n 次,对每次取max就可以找到答案 对于 i 左边的序列: 需要满足序列是非递减的, 同时每个值尽可能大 所以满足 ... 
- 经验之谈:我为什么选择了这样一个激进的缓存大Key治理方案
			一.引言 本文将结合我的一次Redis大Key的治理经验,来浅谈一下缓存大Key的治理方案选择.文中主要包括缓存大Key基础知识.大Key治理方案选择.大Key治理案例等,适合有一定开发经验的开发者阅 ... 
