题目描述
给出一个列表如[[6,7,],[5,4],[3,2]],表示木块的长和宽,当木块的长和宽不大于另个木块的长和宽时,就可以放在上面,此外数组还可以左右翻转。求最多能搭多少层。

输入描述
一个二维数组,里面是每个积木的长和宽,可以左右翻转。

输出描述
最多能搭多少层。

样例
输入
[[5,4],[6,3],[6,7],[6,6],[4,6]]
输出
4

思路分析:
首先对输入的积木进行处理,统一大的做长放第一个位置,小的做宽放第二个位置。
自定义排序,所有积木降序排,长度降序,相同则宽度降序。
动态规划求最大。定义一个 dp 数组,dp[i] 表示如果积木为 i 时,最大积木层数。j 表示前 i - 1 个积木,如果前 i - 1 个积木中宽度大于当前积木,dp[i]就等于两者最大值,则状态转移方程:

if (nums[j][1] >= nums[i][1]) {dp[i] = Math.max(dp[i], dp[j] + 1);  // 当前值,或从0到i-1中找到宽大于当前积木的
}
public class BuildingBlocks {public static void main(String[] args) {Scanner in = new Scanner(System.in);String str = in.nextLine();// 去掉字符串的所有括号,这里注意下字符串的解析str = str.replaceAll("\\[", "");str = str.replaceAll("\\]", "");str = str.replaceAll("\\s+", "");  // 去掉所有空格String[] str1 = str.split(",");int[][] nums = new int[str1.length / 2][2];for (int i = 0; i < nums.length; i++) {int num1 = Integer.parseInt(str1[2 * i]);int num2 = Integer.parseInt(str1[2 * i + 1]);nums[i][0] = Math.max(num1, num2);  // 大的为长度nums[i][1] = Math.min(num1, num2);  // 小的为宽度}// 先对积木自定义排序,按长度降序,相同按宽度降序Arrays.sort(nums, (o1, o2) -> o1[0] == o2[0] ? o2[1] - o1[1] : o2[0] - o1[0]);// 动态规划,dp[i] 表示如果积木为 i 时,最大积木嵌套数int[] dp = new int[nums.length];Arrays.fill(dp, 1);  // 初始化为1int max = 1;for (int i = 1; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[j][1] >= nums[i][1]) {dp[i] = Math.max(dp[i], dp[j] + 1);  // 当前值,或从0到i-1中找到宽大于当前积木的}}max = Math.max(dp[i], max);}System.out.println(max);}
}

【华为校招】【校招】【Java】叠积木相关推荐

  1. 华为od机试: 叠积木

    import java.util.Arrays; import java.util.Scanner;public class Solution_回溯 {public static void main( ...

  2. 华为暂缓校招,解散校招群,冲上热搜,引发应届生强烈不满!

    来自:非著名程序员 最近,华为冲上了微博热搜榜,原因就是华为疑似暂缓 2023 届校招. 据传 11 月 16 日下午开始,在脉脉.微博.小红书等社交平台上,不少用户爆料华为暂缓 2023 届校园招聘 ...

  3. 华为2021校招【软件开发岗】笔+面试总结

    华为2021校招[软件开发岗]笔+面试总结 文章目录 华为2021校招[软件开发岗]笔+面试总结 个人情况 一.机试 二.综合测试 三.专业面试一 四.专业面试二 五.业务主管面试 六.总结 个人情况 ...

  4. 2014宇龙酷派校招西安java类笔试题(热乎的,还冒烟呢)

    2014宇龙酷派校招西安java类笔试题(热乎的,还冒烟呢) 分类: 校招笔经 or 面经2013-09-18 16:19 674人阅读 经过了 叫人伤感的 阿里,我决定去 这些小公司找找 信心,今天 ...

  5. 上海汉得校招笔试-Java

    上海汉得校招笔试-Java 一.单项选择题(2分/题,共20分) 二.多项选择题 (4分/题,共20分) 三.填空题(4分/题,共20分) 四.简答题(5分/题,共20分) 五.编程题(20分) 一. ...

  6. 华为暂缓校招,冲上热搜,引应届生不满

    大家好,我是校长. 昨天傍晚,华为冲上了微博热搜榜,原因就是华为疑似暂缓 2023 届校招. 据传 11 月 16 日下午开始,在脉脉.微博.小红书等社交平台上,不少用户爆料华为暂缓 2023 届校园 ...

  7. 知己知彼,百战不殆,阿里华为电信大厂Java程序员秋招面经大合集(含更新)

    最近整合收集了阿里华为等大厂java程序员面经,看完你就明白为啥别人都能offer拿到手软了,文末含资料整合收集PDF,需要可自取 阿里内推 一面(电话) 听说你有博客,博客里大概有什么内容? 项目介 ...

  8. 刷题记录(NC235611 牛牛国的战争,NC23803 DongDong认亲戚,NC235622 叠积木)

    NC235611 牛牛国的战争 题目链接 关键点 1.因为要在能击败所有敌军的基础下,求存活最多的数量,那么我们可以对敌军的防御力从大到小排列,对于友军的攻击力从大到小排列,这样遍历一次敌军,将所有可 ...

  9. 华为java 上机_华为校园招聘Java上机笔试题

    华为校园招聘Java上机笔试题 1.将大写字母转换成其对应小写字母后的第五个字母,大于z的从头开始数. 2.将一个十进制数(byte类型)转化二进制数,将二进制数前后颠倒,再算出颠倒后其对应的十进制数 ...

  10. java oj题及答案_华为OJ答案(java版)题目2

    华为OJ&答案(java版) 1. 功能:等差数列 2,5,8,11,14.... 输入:正整数N >0 输出:求等差数列前N项和 返回:转换成功返回 0 ,非法输入与异常返回-1 pu ...

最新文章

  1. VUE的本地应用-V- html
  2. R语言广义线性模型泊松回归(Poisson Regression)模型
  3. 四十而不惑——DNA测序技术的前世今生和未来
  4. 我是怎样成长为系统架构师的
  5. pku 1925 Spiderman DP
  6. P4051-[JSOI2007]字符加密【SA】
  7. [Kaggle] Housing Prices 房价预测
  8. 利用Facebook提供的免费工具进行宣传
  9. Redis和Memcached的区别详解
  10. redis事务乐观锁,watch
  11. 2020 Pwn2Own东京大赛落幕,Master of Pwn 诞生
  12. 【动态规划笔记】背包问题:搬寝室
  13. CentOS 5.5 安装VirtualBox
  14. 管螺纹如何标注_外螺纹、内螺纹的画法,非标准螺纹的画法,你还会画吗?
  15. 修改整个app的字体
  16. 大数据最核心的价值是什么?
  17. Android app crash的问题排查思路与反思
  18. Node.js 删除本地文件/文件夹
  19. Java 11 JDK
  20. 2022电工(初级)考试试题及答案

热门文章

  1. 系统监控+流量监控+抓包分析
  2. c++编写乘法口诀表
  3. ZooKeeper JMX enabled by default
  4. Lombok requires enabled annotation processing
  5. 王慧文清华产品课(六)
  6. 微信摇一摇——iBeacon基站(一):USB蓝牙模式
  7. 使用ARCGIS多重缓冲区分析工具建立颜色渐变行政边界
  8. 蒟蒻的数据结构乱谈(未完)
  9. 计算机系统具有运行可靠性,计算机系统的可靠性技术
  10. springboot呼伦贝尔旅游网站的设计与实现毕业设计源码091833