大企业的算法面试题,等你来挑战。

问题描述

木头排列的问题:一堆长短不一的木头需要装在纸盒子里面,每一层由若干个木头组成,且木头拼接的总长度不能超过盒子的长度1200mm。使整体形成一个L型的形状。写一个算法实现功能。看你们的算法能力了,这道题是一家大型企业的面试题。具体哪一家稍后会公布,看看你们的能力了。

解决方案

解决方案二:
1200mm是不是多余了?
解决方案三:
好难啊。好难啊。
解决方案四:
使整体形成L是什么意思?
解决方案五:
最大层数有限制吧,如果不限制的话,直接排序,然后一层只放一根木头,大的在下,小的在上。。
解决方案六:
表示关注,
解决方案七:
好麻烦!题目的意思是不是将若干根木头拼接,取得小于1200mm的最大值,接着再在剩下的木头中取出若干根,又使其组合为“最大值”.....依次类推。
解决方案八:
按长短排序放进链表里,每次取出几个小于1200的最大值
解决方案九:
按L是要从上到下每层的长度越来越长
解决方案十:
题目的意思表示不是很理解
解决方案十一:
怎么没有后续了。。。
解决方案十二:
写个哈夫曼树然后从根节点开始往下找(左右子树),直到节点值小于1200,把所有这样的节点值从小到大排,然后根据树叶构成,搭木块,不知道这样是不是可以呢。
解决方案十三:
引用4楼bylijinnan的回复:

最大层数有限制吧,如果不限制的话,直接排序,然后一层只放一根木头,大的在下,小的在上。。

这种题最大层数肯定没有限制,但是肯定是要求最少层数了。引用6楼yujinlong0001的回复:

好麻烦!题目的意思是不是将若干根木头拼接,取得小于1200mm的最大值,接着再在剩下的木头中取出若干根,又使其组合为“最大值”.....依次类推。

这题目如果不考虑效率倒是不难,按照6楼的这种思路翻译成代码就完了,如果要考虑效率恐怕还真是不好搞。6楼的这种方式效率肯定很低。
解决方案十四:
如果要确保层数最小,是很难的题目,如果差不多就行,就算一般难的题目
解决方案十五:

解决方案:
引用3楼vnvlyp的回复:

使整体形成L是什么意思?

应该是把长的放成一层层短的放竖着求最优算法
解决方案:
引用12楼rumlee的回复:

Quote: 引用4楼bylijinnan的回复:
最大层数有限制吧,如果不限制的话,直接排序,然后一层只放一根木头,大的在下,小的在上。。

这种题最大层数肯定没有限制,但是肯定是要求最少层数了。引用6楼yujinlong0001的回复:

好麻烦!题目的意思是不是将若干根木头拼接,取得小于1200mm的最大值,接着再在剩下的木头中取出若干根,又使其组合为“最大值”.....依次类推。

这题目如果不考虑效率倒是不难,按照6楼的这种思路翻译成代码就完了,如果要考虑效率恐怕还真是不好搞。6楼的这种方式效率肯定很低。

应该是把长的放成一层层短的竖着放求最优算法
解决方案:
确实如Android_iPhone所说,如果要确保层数,确实很难,不要确保的话还行。个人思路,可能有误,仅供参考:设计两个类搞定木头类,是个Bean属性:长度(不对外暴露SET方法,在初始化对象的时候随机生成)木头的ID盒子类属性:弄一个字段1200用来限制长度一个静态的TreeMap,K是层长度,V是一个List里面放了这层的木头方法:静态putWood接受一个参数,List<Wood>list,返回一个盒子对象主要功能是循环执行,随机放入1到list.size()根木头,因为是TreeMap,所以随便放,放进去后会按照K来排序。主类:main方法,搞一个LIST放几个木头对象,用盒子类的静态方法putWood返回一个盒子对象,盒子对象都拿到了,接下来把它的TreeMap拿出来,再把每层和每层的LIst中的木头拿出来,打印出来看看完事儿。
解决方案:
没看懂题,这要是在面试时不是要pass的节奏吗
解决方案:
最偷懒的办法,全部用贪婪法,把这些木头分成若干组,使得每组的总长都<=1200,然后将这些组按照总长度排序,长的排底下。当然不是最优解,但是应该性价比比较高吧。
解决方案:
我猜应该这样做:每次从剩余的木棍中选择几根,1。长度和不超过1200mm的。2.并且长度和是最大的。这样的选择过程其实就是一个0-1背包问题吧。

时间: 2024-10-24 19:51:59

大企业的算法面试题,等你来挑战。的相关文章

数据结构与算法面试题80道

1.把二元查找树转变成排序的双向链表  题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向.    10  / \  6 14  / \ / \ 4 8 12 16  转换成双向链表 4=6=8=10=12=14=16.    首先我们定义的二元查找树 节点的数据结构如下:  struct BSTreeNode {  int m_nValue; // value of node  BSTreeNode *m_pLeft; // lef

算法面试题

1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16. 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of nod

Twitter算法面试题详解(Java实现)

最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案.先看一下题目. 图1 先看看这个图.可以将方块看做砖.题干很简单,问最多能放多少水.例如,图2就是图1可放的最多水(蓝色部分),如果将一块砖看做1的话,图2就是能放10个单位的水. 图2 再看个例子 图3 图3可以放17个单位的水. 上面每一个图的砖墙用int数组表示,每一个数组元素表示每一列砖墙的砖数(高度),例如,图3用数组表示就是int[] w

算法实践——Twitter算法面试题(积水问题)的线性时间解法

问题描述:在下图里我们有不同高度的挡板.这个图片由一个整数数组所代表,数组中每个数是墙的高度.下图可以表示为数组(2.5.1.2.3.4.7.2).假如开始下雨了,那么挡板之间的水坑能够装多少水(水足够多)呢?   下图是装满水的情况,一个蓝色格子代表一个单位的水.下图中一共装了10个单位的水.     问题分析:   先看看下图,判断哪个单元格的水能留下来.下图中的两个单元格,一个红色的单元格和一个绿色的单元格,哪个单元格的水是溜走了,哪个单元格的水能留下来? 很明显的,上图中的红色单元格的水

一道算法面试题

问题描述 有4个彩色的立方体.立方体的6个面,每面都涂上了1种颜色.一共有4种颜色,蓝色(B),红色(R),绿色(G)和黄色(Y).立方体的6个面称为前(front).后(back).左(left).右(right).上(top).下(bottom).这4个立方体的颜色排列为:编号frontbackleftrighttopbottom1RBGYBY2RGGYBB3YBRGYR4YGBRRR请将这4个立方体重叠摆放成为一个立柱,这个立柱有4个侧面,要求每个侧面都有4种颜色.用你最拿手的语言编程实现

分享阿里巴巴综合算法面试题详解

这道题的大意是:有一个淘宝商户,在某城市有n个仓库,每个仓库的储货量不同,现在要通过货物运输,将每次仓库的储货量变成一致的,n个仓库之间的运输线路围城一个圈,即1->2->3->4->-->n->1->-,货物只能通过连接的仓库运输,设计最小的运送成本(运货量*路程)达到淘宝商户的要求,并写出代码. 解题思路: 假设n个仓库的初始储货量分别为warehouse[1],warehouse[2],-,warehouse[n] 计算平均储货量  average = (w

微软的22道数据结构算法面试题

1.反转一个链表.循环算法. 1 List reverse(List l) { 2 if(!l) return l; 3 list cur = l.next; 4 list pre = l; 5 list tmp; 6 pre.next = null; 7 while (cur) { 8 tmp=cur; 9 cur=cur.next; 10 tmp.next=pre 11 pre=tmp; 12 } 13 return tmp; 14 } 2.反转一个链表.递归算法. 1 List resve

某研究院的二叉树深度优先遍历变种的算法面试题以及答案

  去了某研究院面试,被面了一道算法题,觉得有点意思,所以写下来供后人参考. 题目是这样子的: 给定二叉树,二叉树的每个节点都是一个整数值,求从叶子节点到根节点的和为某数的所有路径 例如下图中,要求叶子节点到根节点的值和为14的路径为: 3,6,53,7,4 这道题考的是二叉树深度优先遍历的增强版,其实现代码如下: package cn.outofmemory; import java.util.Stack; public class TreeSum { public static void m

10个经典的Java main方法面试题_java

分享给大家,如有错误,请指出. 1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7开始就行不通了. 2.main()方法需要的参数不是字符串数组? 不是的,main()方法的参数必须是字符串数组. 但是,在引进变参时,你可以将字符串类型的变参作为参数传递给main()方法.变参一定得是数组. package com.instanceofjava; public class Main