搭积木

 

类似思维导图, 头脑风暴,整理一个对计算机编程的所有认识,欢迎评判:

 

协议

HTTP

FTP

TCP/IP

系统

共同

MAC

Windows

Linux

数据结构与算法

BTree

数据库

Oracle

MySQL

Mongo

结构查询语言

SQL

SQL优化

SQL Debug

Update与Delete的效率比较

NoSQL

设计模式

工厂模式

编程语言

服务端语言

Java

特性

堆与栈

JVM

对象存储

JVM命令

JVM特制

JDK

JRE

Bin

服务器

Tomcat

Jetty

Weblogic

Jboss

技术框架

Struts

Spring

Hibernate

联合主键

Criteria优化问题

SSH

Struts与Spring结合的方式

存储过程的应用

多线程应用

URL重定向/重写

iBatis

Lucene 

Solr

多线程

存储过程

泛型

同步

C++

Ruby

脚本语言

HTML

JavaScript

JavaScript效率

开发IDE

Eclipse

其他技术

Ajax

长请求

 

 

 

### 蓝桥杯 搭积木 Java 解题思路 蓝桥杯比赛中的搭积木问题通常涉及模拟方的堆叠过程以及计算某些属性(如高度)。这类题目可以借鉴力扣上类似的题目,比如掉落的方[^1]。 #### 思路分析 对于此类问题,核心在于如何高效地维护已有的积木状态并快速判断新加入积木的影响。以下是可能的解题方法: - **数据结构的选择** 使用列表或其他动态数组来存储每已经放置好的积木的状态。每个积木可以用个模型 `Model` 表示,其中包含左边界 (`left`) 和右边界 (`right`) 的坐标范围,以及该积木的高度 (`height`)。 - **排序与查找优化** 将现有的积木按其左侧位置进行升序排列。当有新的积木落下时,通过二分查找或者线性扫描找到与其重叠的部分,并更新这些部分的最大高度。由于序列是有序的,在发现当前积木右侧超出已有积木右侧的情况下可提前终止循环。 - **时间复杂度考虑** 如果采用暴力方式逐比较所有现有积木,则可能导致性能瓶颈。因此建议引入更高效的算法或辅助工具(例如树状数组、线段树等),进步降低单次操作的时间开销。 #### 示例代码 下面提供了个基于上述逻辑框架编写的简单版本Java程序作为参考: ```java import java.util.ArrayList; import java.util.List; class Model { int left, right, height; public Model(int l, int r, int h) { this.left = l; this.right = r; this.height = h; } } public class BuildBlocks { private List<Model> models = new ArrayList<>(); public void dropBlock(int[] block) { // 输入block={x,y,h} int maxHeight = 0; for (int i=0;i<models.size();i++) { Model m = models.get(i); if(block[1]<m.left){ break;// 当前积木右边小于等于model左边则无需继续遍历 } if(!(block[0]>m.right || block[1]<m.left)){ maxHeight=Math.max(maxHeight,m.height); } } int finalHeight=maxHeight+block[2]; models.add(new Model(block[0],block[1],finalHeight)); // 对list重新排序以便后续更快查询 models.sort((a,b)->Integer.compare(a.left,b.left)); } public static void main(String args[]) { BuildBlocks bb=new BuildBlocks(); bb.dropBlock(new int[]{1,3,2}); bb.dropBlock(new int[]{2,5,3}); } } ``` 此代码片段实现了基本的功能模——接收输入参数表示要投放的新积木位置及其初始高度;随后依据既定规则调整整体布局并将结果存入内部容器之中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值