面试问题排名FizzBu​​zz(1),实现malloc(10)[关闭]


10

我想对以下面试问题的难度发表意见:

在O(n)时间的整数数组中找到最大和的连续子数组。

乔恩·本特利(Jon Bentley)在他的《编程珍珠》中将这个琐碎的发声问题称为著名,他用它来演示算法设计技术。

以1到10的比例,1是FizzBu​​zz(或HoppityHop)测试,10是实现C stdlib函数malloc(),您如何评价上述问题?

我认为最能回答这个问题的人是已经阅读了《 Programming Pearls》并尝试自己解决此问题的人。为了激励那些没有的人,“ Programming Pearls”在“十大编程书籍”列表中得到了很多推荐。

以下几点评论可能有助于获得更好的评分:

  • 实现malloc()并不像看起来那么困难。例如,请参见K&R的C编程语言。有时微软会问它

  • CLRS对问题解决的观察:从头开始解决问题通常比验证清楚提出的解决方案更加困难,尤其是在时间限制下工作时


12
困难在于整数可以为负吗?(否则整个数组始终是最大的子数组,因此O(1):
Macke

4
问题应该说“找到连续的
数组

6
我不会在面试中要求“在O(n)中”。您可以从幼稚的解决方案开始,然后根据需要对其进行优化,但是我不希望有人能够在1小时的采访中获得O(n)解决方案,而无需事先接触过该算法。
Dean Harding

2
对。如果您允许O(n²)解,这是一个简单的问题。
dan04 2011年

@Dean,我希望他们能够将运行的平均类型总和从O(1)中的位置j移动到j + 1。也许是公平的,这可以作为提示。(我假设子数组的长度已预先指定)
Omega Centauri

Answers:


17

这确实取决于开发人员。

如果malloc为10,那么我将这个问题的评分为20。但是再一次,我之前已经做过malloc,并且可能会再次做。

有人已经解决了这个问题,或者知道适当的算法将其设为5,将malloc()设为10。

这类问题的问题在于,如果您在做起来容易之前就完成了这些操作,这实际上是对您之前是否看过此算法的检验。因此,我不喜欢他们接受采访。

现在,对于您花几天时间给开发人员的测试,这是一个非常好的测试,因为如果他们不了解算法,则可以给他们机会进行研究并加快开发速度,这不仅是一种测试您的知识,但是您获得新知识的能力。


天气->是否在第四段中(对不起,很抱歉,我没有代表做错字编辑...)
Matthieu M.

马丁,我认为这取决于您要面试人们的申请类型。对于系统类型,malloc非常简单。对我来说-用malloc卡住了[我认为堆栈地址和长度等已故意向我隐瞒了],但是子数组问题几乎是微不足道的。关键是使问题与工作需求相匹配。
欧米茄半人马座

8

我猜,评级至少应该是二维的。FizzBu​​zz- malloc描述了一个轴上的范围,我称之为“技术复杂性”。但是,这个单一维度肯定不足以描述问题。为了解决上述问题,开发人员应该考虑的不仅仅是代码,而实现则malloc需要更多的编码纪律,而不是创建复杂的算法。

所以这是我如何解决这些问题的方法:

在此处输入图片说明

为了说明我的观点,我在图上添加了并行合并排序,因为我想这是技术和算法复杂任务的一个很好的例子。


2

我认为这比FizzBu​​zz或HoppityHop困难得多-这两个仅是简单的if-else或循环切换情况。

最大子数组将需要对潜在问题进行更深入的分析-在初学者编程课程中,您不会期望看到这种情况,因为与FizzBu​​zz类型的问题相比,它需要更高的数学技能。这个问题与最短路径问题有相似的感觉,后者是由Dijkstra的算法解决的-也许这是最长路径问题的特化

以您的1到10的评分,我可能会在3到5之间进行评分。

*当服务器关闭时,我发现最大子数组问题在Wikipedia上有其自己的页面。


当以下概念上更简单的算法对我有用时,有人可以解释为什么需要在维基百科上描述的算法:在单遍中,计算累积总和,以通常的方式找到最小值和最大值。最大总和连续子序列在最小累积索引之后开始,一直延伸到最大累积索引并包括最大累积索引。
Ben Voigt

2
@Ben Voigt:尝试序列{+ 2,-4,+ 1}或{+ 1,+ 1,-1,-1,-1,-1,+ 1}。实际上,Kadane方法非常简单-它仅扫描一次数组,并以动态编程的方式使三个变量保持更新。
rwong

@rwong:好的,如果最小值在最大值之后,则需要Kadane。我计算了5个变量,而不是3个,再加上循环索引。
Ben Voigt

@本:你是对的,它是5个变量加上循环索引。
rwong

1

我给它一个3。除了我采访过的大多数程序员以外,对于我建议雇用的那些人来说,这是一个容易解决的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.