(200分)- 叠积木(Java  JS  Python  C)
(200分)- 叠积木Java JS Python C题目描述有一堆长方体积木它们的宽度和高度都相同但长度不一。小橙想把这堆积木叠成一面墙墙的每层可以放一个积木也可以将两个积木拼接起来要求每层的长度相同。若必须用完这些积木叠成的墙最多为多少层输入描述输入为一行为各个积木的长度数字为正整数并由空格分隔。积木的数量和长度都不超过5000。输出描述输出一个数字为墙的最大层数如果无法按要求叠成每层长度一致的墙则输出-1。用例输入3 6 6 3输出3说明可以每层都是长度3和6的积木拼接起来这样每层的长度为9层数为2也可以其中两层直接用长度6的积木两个长度3的积木拼接为一层这样层数为3故输出3。输入1 4 2 3 6输出-1说明无法用这些积木叠成每层长度一致的墙故输出-1。题目解析本题对每层积木数量有限制最多两个最少一个。解题思路如下单积木情况只有一个积木时最大高度为1双积木情况两个等长积木时最大高度为2两个不等长积木时最大高度为1三个及以上积木的处理方法将积木数组nums按长度降序排列确定每层长度范围最小长度nums[0]最长积木最大长度nums[0]nums[1]最长次长积木遍历可能的层长(length)初始化指针L0Rnums.length-1处理单积木层 当nums[L]length时独立成层层高1L处理双积木层 计算sum nums[L]nums[R]若sumlength成层层高1LR--若sum≠lengthsumlength时nums[L]无法与其他积木成层sumlength时nums[R]无法与其他积木成层最优解策略 由于层长越小越可能获得更高层数因此从最小层长(nums[0])开始遍历找到第一个能搭建所有积木的层长即为最优解。2026.2.15在进行逻辑分析时假设nums数组已按降序排列则第一层的长度范围应为nums[0] ~ nums[0] nums[1]当nums.length 1时需要注意的是将第一层长度最大值设为nums[0] nums[1]存在冗余问题。因为当第一层长度定义为nums[0] nums[1]时数组中任意两个积木长度之和nums[i] nums[j]1 i,j nums.length必然小于nums[0] nums[1]假设积木长度不完全相同这会导致后续遍历长度范围时产生不必要的判断更优的方案是将第一层最大长度设为nums[0] nums[-1]即最大积木与最小积木之和这样可以避免上述问题。举例说明 给定降序排列的积木长度5,4,3,3,2,1若取549作为第一层长度则没有其他积木组合能达到相同长度但若取516则存在42和33这两种组合方式JS算法源码/* JavaScript Node ACM模式 控制台输入获取 */ const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on(line, (line) { const nums line.split( ).map(Number); console.log(getResult(nums)); }); function getResult(nums) { const n nums.length; // 如果只有一个积木那么只能是一层高度 if (n 1) return 1; // 如果有两个积木 // 如果两个积木长度相同则最大高度为2 // 如果两个积木长度不同则最大高度为1 if (n 2) return nums[0] ! nums[1] ? 1 : 2; // 积木按长度降序 nums.sort((a, b) b - a); // 一层的最小长度即最长的积木的长度 const minLen nums[0]; // 一层的最大长度 const maxLen nums[0] nums.at(-1); // 尝试minLen和maxLen中每一个值作为一层长度 for (let len minLen; len maxLen; len) { // 对应一层长度限制下的最大高度 let height 0; // 通过l,r指针去选择组成一层的一个或两个积木 // l指针指向最大长度的积木 let l 0; // r指针指向最小长度的积木 let r n - 1; // 如果最大长度的积木可以独立一层则lheight while (l n nums[l] len) { l; height; } // 如果 l,r积木无法组成一层 // 假设nums[l] nums[r] length则必然nums[l] nums[r-1] length // 因为nums已降序nums[r-1] nums[r]即必然l积木无法和其他积木组成一层 // 假设nums[l] nums[r] length则必然nums[l1] nums[r] length // 因为nums已降序nums[l1] nums[l]即必然r积木无法和其他积木组成一层 while (l r) { if (nums[l] nums[r] ! len) break; l; r--; height; } // 如果正常结束则必然l r否则就是异常结束 if (l r) continue; return height; } return -1; }Java算法源码import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); Integer[] nums Arrays.stream(sc.nextLine().split( )).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(nums)); } public static int getResult(Integer[] nums) { int n nums.length; // 如果只有一个积木那么只能是一层高度 if (n 1) { return 1; } // 如果有两个积木 if (n 2) { // 如果两个积木长度相同则最大高度为2 // 如果两个积木长度不同则最大高度为1 return nums[0] - nums[1] ! 0 ? 1 : 2; } // 积木按长度降序 Arrays.sort(nums, (a, b) - b - a); // 一层的最小长度即最长的积木的长度 int minLen nums[0]; // 一层的最大长度 int maxLen nums[0] nums[nums.length-1]; // 尝试minLen和maxLen中每一个值作为一层长度 for (int len minLen; len maxLen; len) { // 对应一层长度限制下的最大高度 int height 0; // 通过l,r指针去选择组成一层的一个或两个积木 // l指针指向最大长度的积木 int l 0; // r指针指向最小长度的积木 int r n - 1; // 如果最大长度的积木可以独立一层则lheight while (l n nums[l] len) { l; height; } // 如果 l,r积木无法组成一层 // 假设nums[l] nums[r] length则必然nums[l] nums[r-1] length // 因为nums已降序nums[r-1] nums[r]即必然l积木无法和其他积木组成一层 // 假设nums[l] nums[r] length则必然nums[l1] nums[r] length // 因为nums已降序nums[l1] nums[l]即必然r积木无法和其他积木组成一层 while (l r) { if (nums[l] nums[r] ! len) break; l; r--; height; } // 如果正常结束则必然l r否则就是异常结束 if (l r) continue; return height; } return -1; } }Python算法源码# 输入获取 nums list(map(int, input().split())) # 算法入口 def getResult(): # 如果只有一个积木那么只能是一层高度 if len(nums) 1: return 1 # 如果有两个积木 if len(nums) 2: # 如果两个积木长度相同则最大高度为2 # 如果两个积木长度不同则最大高度为1 return 1 if nums[0] ! nums[1] else 2 # 积木按长度降序 nums.sort(reverseTrue) # 一层的最小长度即最长的积木的长度 minLen nums[0] # 一层的最大长度 maxLen nums[0] nums[-1] # 尝试minLen和maxLen中每一个值作为一层长度 for length in range(minLen, maxLen 1): # 对应一层长度限制下的最大高度 height 0 # 通过l,r指针去选择组成一层的一个或两个积木 # l指针指向最大长度的积木 l 0 # r指针指向最小长度的积木 r len(nums) - 1 # 如果最大长度的积木可以独立一层则lheight while l len(nums) and nums[l] length: l 1 height 1 while l r: # 如果 l,r积木无法组成一层 # 假设nums[l] nums[r] length则必然nums[l] nums[r-1] length因为nums已降序nums[r-1] nums[r]即必然l积木无法和其他积木组成一层 # 假设nums[l] nums[r] length则必然nums[l1] nums[r] length因为nums已降序nums[l1] nums[l]即必然r积木无法和其他积木组成一层 if nums[l] nums[r] ! length: break else: l 1 r - 1 height 1 # 如果正常结束则必然l r否则就是异常结束 if l r: continue return height return -1 # 算法调用 print(getResult())C算法源码#include stdio.h #include stdlib.h #define MAX_SIZE 5000 int getResult(); int cmp(const void *a, const void *b); int nums[MAX_SIZE]; int nums_size 0; int main() { while (scanf(%d, nums[nums_size])) { if (getchar() ! ) break; } printf(%d\n, getResult()); return 0; } int getResult() { // 如果只有一个积木那么只能是一层高度 if (nums_size 1) { return 1; } // 如果有两个积木 if (nums_size 2) { // 如果两个积木长度相同则最大高度为2 // 如果两个积木长度不同则最大高度为1 return nums[0] ! nums[1] ? 1 : 2; } // 积木按长度降序 qsort(nums, nums_size, sizeof(int), cmp); // 一层的最小长度即最长的积木的长度 int minLen nums[0]; // 一层的最大长度即最长的两个积木的长度之和 int maxLen nums[0] nums[nums_size - 1]; // 尝试minLen和maxLen中每一个值作为一层长度 for (int len minLen; len maxLen; len) { // 对应一层长度限制下的最大高度 int height 0; // 通过l,r指针去选择组成一层的一个或两个积木 // l指针指向最大长度的积木 int l 0; // r指针指向最小长度的积木 int r nums_size - 1; // 如果最大长度的积木可以独立一层则lheight while (l nums_size nums[l] len) { l; height; } while (l r) { // 如果 l,r积木无法组成一层 // 假设nums[l] nums[r] length则必然nums[l] nums[r-1] length因为nums已降序nums[r-1] nums[r]即必然l积木无法和其他积木组成一层 // 假设nums[l] nums[r] length则必然nums[l1] nums[r] length因为nums已降序nums[l1] nums[l]即必然r积木无法和其他积木组成一层 if (nums[l] nums[r] ! len) break; l; r--; height; } // 如果正常结束则必然l r否则就是异常结束 if (l r) continue; return height; } return -1; } int cmp(const void *a, const void *b) { return (*(int *) b) - (*(int *) a); }

相关新闻

(200分)- 推荐多样性(Java  JS  Python  C)

(200分)- 推荐多样性(Java JS Python C)

(200分)- 推荐多样性(Java & JS & Python & C)题目描述推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小)&#xff0c…

2026/7/6 18:46:08 阅读更多 →
吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(二)

吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(二)

未匾挥矣此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下: 原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与…

2026/7/7 3:01:55 阅读更多 →
大数据领域数据中台的自动化测试方案

大数据领域数据中台的自动化测试方案

大数据中台自动化测试全攻略:从0到1搭建可靠的质量保障体系 引言:数据中台的质量痛点,你中了几个? 作为数据中台的从业者,你是否遇到过这些场景: 业务方反馈报表数据错误,排查发现是DWS层汇总逻…

2026/7/3 22:37:56 阅读更多 →

最新新闻

交叉熵损失函数 PyTorch 2.0 实战:3 种分类任务代码对比与性能分析

交叉熵损失函数 PyTorch 2.0 实战:3 种分类任务代码对比与性能分析

交叉熵损失函数 PyTorch 2.0 实战:3 种分类任务代码对比与性能分析在深度学习分类任务中,损失函数的选择直接影响模型的训练效果。交叉熵损失函数因其优秀的数学特性,成为分类问题的标配工具。本文将聚焦PyTorch 2.0框架,通过代码…

2026/7/7 6:27:46 阅读更多 →
免费英雄联盟终极工具箱:5分钟快速掌握League Akari的完整使用指南

免费英雄联盟终极工具箱:5分钟快速掌握League Akari的完整使用指南

免费英雄联盟终极工具箱:5分钟快速掌握League Akari的完整使用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否觉得英雄…

2026/7/7 6:27:46 阅读更多 →
写在开头:我为什么开这个专栏?

写在开头:我为什么开这个专栏?

你好,欢迎来到《制造业数字化实战》专栏。 我是吴记数智工坊,在电子制造行业做了15年数字化系统,从一线开发到技术经理,经手84个系统项目——覆盖SMT生产、品质、仓储、成本、关务等全链条。 过去,我只是一个写代码的人…

2026/7/7 6:27:46 阅读更多 →
PyTorch EMA实现避坑:decay=0.999与0.9999的4个关键差异点

PyTorch EMA实现避坑:decay=0.999与0.9999的4个关键差异点

PyTorch EMA实现深度解析:从数学原理到工业级避坑指南在深度学习模型的训练过程中,噪声和波动是影响最终性能的关键因素。指数移动平均(EMA)作为一种简单却强大的技术,能够有效平滑模型权重更新轨迹,提升模…

2026/7/7 6:25:46 阅读更多 →
本地部署AI生图与视频生成工具:免费无限制完整指南

本地部署AI生图与视频生成工具:免费无限制完整指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来深入分析一款本地部署的AI生图和视频生成工具。从标题看,这款工具主打免费无限制、功能超越小云雀和即梦2.0等知…

2026/7/7 6:25:46 阅读更多 →
计算机毕业设计之jsp企业舆情监控与分析系统

计算机毕业设计之jsp企业舆情监控与分析系统

“互联网”的战略实施后,很多行业的信息化水平都有了很大的提升。但是目前很多企业日常工作仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,这样就浪费了许多的人力物力,工作效率较低,同…

2026/7/7 6:25:46 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻