35得票44回答
给定一个数字列表和一个数字k,返回列表中是否存在任意两个数字相加等于k。

这个问题是在Google的编程面试中提出的。我想到了两种方法: 找到所有长度为n的子序列,计算两个元素的和并检查它是否等于k。如果是,则打印Yes,否则继续搜索。这是一种暴力的方法。 将数组按非递减顺序排序。然后从其右侧开始遍历数组。假设我们有一个已排序的数组{3,5,7,10},我们想让...

33得票7回答
建立桥梁问题 - 如何应用最长递增子序列?

建桥问题的陈述如下: 某区域有一条水平流动的河流。该区域上下各有一组城市。每个在河流上方的城市都与河流下方的一个城市匹配,你会得到这些匹配对。 你希望建立一组跨过河流的桥梁,以连接尽可能多的城市匹配对,但必须以不相交的方式完成。 设计一种算法,以尽可能高效地解决此问题。 我听说这个问题与最...

33得票3回答
如何理解线性分割中的动态规划解决方案?

我不太理解线性分割问题的动态规划解法。我正在阅读算法设计手册,该问题在第8.5节中有描述。我已经无数次地阅读了该节,但我仍然无法理解它。我认为这是一个糟糕的解释(到目前为止我所读的内容都要好得多),但我还没有能够充分理解问题以寻找替代解释。欢迎提供更好的解释链接! 我找到了一篇与书中文字类似...

33得票5回答
无法通过数组中的数字求和得到的最小数字

这个问题是在亚马逊面试中问到我的 - 给定一个正整数数组,你需要找到不能由数组中的数字之和形成的最小正整数。 例子:Array:[4 13 2 3 1] result= 11 { Since 11 was smallest positive number which can not be ...

33得票6回答
一条直线最多能穿过多少个矩形?

我发现了这个挑战问题,其陈述如下: 假设在XY平面上有n个矩形。编写一个程序来计算可以用一条直线穿过的最大矩形数量。 我已经思考了相当长的时间,但是找不到任何解决方案。 也许在某个阶段,我们使用动态规划步骤,但是无法确定如何开始。

31得票5回答
箱子堆叠问题

我在很多地方都看到了这个著名的dp问题,但我无法想出解决方法。 你有n种不同类型的长方体3D盒子,第i个盒子的高度为h(i),宽度为w(i),深度为d(i)(均为实数)。你希望创建一个尽可能高的盒子堆栈,但是只有在下面的盒子的二维底部的尺寸都比上面的盒子大时,才能将一个盒子叠放在另一个...

30得票5回答
使用动态规划实现文本对齐

我正在尝试通过MIT OCW 这里 上的课程来理解动态规划的概念。OCW视频上的解释非常好,但我感觉直到我将解释实现到代码中,我才真正理解了它。在实现过程中,我参考了一些讲义这里,特别是第3页。 问题是,我不知道如何将某些数学符号翻译成代码。这是我已经实现的部分(我认为它已经正确实现): ...

30得票5回答
动态规划中的记忆化或表格法

有许多问题可以使用动态规划解决,比如最长递增子序列问题。这个问题可以通过以下两种方法之一解决: 备忘录法(自顶向下)- 使用递归来解决子问题,并将结果存储在某个哈希表中。 表格法(自底向上)- 使用迭代方法解决问题,先解决较小的子问题,然后在执行更大的问题时使用它们。 我的问题是哪种方...

29得票3回答
检查给定的字符串是否可以由从杂志文章中剪下的字符集创建

"观察一下,当你从杂志上剪下一个字符时,背面的字符也会被剪掉。提供一个算法来确定是否可以通过从给定的杂志上剪下字符来生成给定的字符串。假设您有一个函数,该函数将识别任何给定字符位置的字符及其在背面页面上的位置。" 我该怎么做呢? 我可以进行一些初始修剪,以便如果需要的字符只有一种选择方式,...

28得票7回答
在图像上布置标签的建议算法/方法

给定一张图片和一组标签,这些标签附着在图片上的特定点上。我正在寻找一种算法,将标签布局到图片的两侧,并满足一定的约束条件(每侧标签数量大致相同,标签大致等距离,将标签与它们各自的点连接起来,不交叉)。 现在,一个近似的解决方案通常可以通过按Y坐标(它们所指向的点的坐标)对标签进行排序来很容易...