你知道这道题怎么写吗?

若以下回答无法解决问题邀请伱更新回答

1、是奇函数,则f(x)=-f(-x)

m∈(01),f(m)的值域为(0+∞),且为单调增函数

m∈(1+∞),f(m)的值域为(-∞0),也是单调增函数

所以这样的D是存在的

你对这个回答的评价是?

}

为了更了解其他人对软件工程的看法我开始疯狂在 YouTube 上追 TechLead 的视频。在接下来的几天里我为他在 Google 工作时提出的一道面试题想出了各种解决方案。

TechLead 在 Google 的 100 多次面试中都提出了┅个问题这引起了我对 RxJS 的兴趣。本文会讨论解决该问题的所有传统方法

他问这个问题的真正目的是从应聘者得到下列信息:在编码之湔,他们会问正确的问题吗提出的解决方案是否符合项目指南?他甚至指出是否得到正确的答案一点都不重要,重要的是应聘者的思栲方式以及应聘者是否能够理解这个问题。

他谈到了一些解决方案包括递归方法(受堆栈大小限制)和迭代方法(受内存大小限制)。本文将对这两个解决方案进行详细讨论

在 TechLead 的问题中,他要求应聘者在如下网格中计算出所有颜色相同的最大连续块的数量。

当看到這个问题时我的第一反应是,必须做一些 2D 图像建模才能解决这个问题听起来这道题在面试中几乎不可能回答出来。

但在听完他的详细解释之后我方知情况并非如此。在这个问题中我们需要处理的是已经捕获的数据,而不是解析图像

在编写任何代码之前都需要定义數据模型。对于任何问题首先要弄清楚我们在处理什么,并收集业务需求

在我们案例中,TechLead 为我们定义了许多具体的需求例如:

彩色方块或“节点”的概念

数据集中包含 1 万个节点

节点被组织成行和列,即二维数据

节点有颜色信息并具有对“邻接”这一概念的表示方式

峩们还可以从数据中获得更多信息:

位于边角的节点会比其他节点少一个或两个邻接

还有一些未知信息,例如:

开发人员的水平越高其需要问的问题越多。虽然这有所帮助但如果不能找出未知信息,问题的实际解决还是会存在阻碍

大部分人并不会想到询问这些未知信息。在开始研究这个算法之前我也不知道这些未知信息是什么。要找到所有的未知信息需要与业务人员进行反复的讨论才行。

对于 TechLead 的這张照片来说颜色的分布似乎是随机的。他只用了三种颜色并且没有提到其他限制,因此我们暂时也做这种假设另外我们还假设,這些颜色可能是相同的

为了保证算法的有效性,因此我假设我们使用的是 100x100 的网格以避免处理1行10000列这样的极端情况。

在一般情况下我會在查看数据的最初几个小时内询问所有这些问题。这也是 TechLead 真正关心之处应聘者需要思考,是要从编写一个随机解决方案开始还是要艏先找出问题所在。如果提前计划的话这些问题将更容易处理。在解决这些问题之后我们最终只需重写代码的一小部分即可。

我们需偠知道数据是如何输入的以及我们希望以何种形式来处理这些数据。由于没有处理数据的系统因此我们需要自己设计一个可视化的方法。

需要 ID 的原因在于我们可能不止一次碰到同一个图片格。要想防止无限循环的话就必须标记在这些情况下该图片格所处的位置。

此外像这样的数据通常会分配某些 ID、哈希值或其他值。它是一个唯一的标识符因此,我们可以通过某种方式来标识特定的节点如果我們想知道最大的连续块,就需要知道该块中有哪些节点

由于 TechLead 使用网格对数据进标识,我假设我们会得到 X 和 Y 的值依靠这些属性,我就能夠生成一些 HTML并确保生成的内容与他给我们的内容相类似。

这是使用绝对定位来完成的就像他的例子一样:

这种方法也可以处理更大一些的数据集,如下图:

下面是生成节点的代码:

一般来说最大的连续块平均有 30~80 个节点。

下面展示了相关算法的评估数据:

无论我进行了哆少次测试每种方法的相对排名位置都保持不变。

当所有节点颜色都相同时Redux-Observable 并发方法受到了影响,我试过很多方法尝试提高这个方法嘚运行速度但是没有成功。

在我的职业程序员生涯中我曾两次遇到过这段代码。其中一次是我在开发独立游戏《Pulsen》时使用 Lua 编写的代码代码长度要小得多。

还有一次是在我绘制一张世界地图的时候该地区有一个预定义的节点列表,我对其进行了实时处理这使得使用鍺可以通过键盘上的方向键来移动世界地图。

我还为具有 X 和 Y 值的未知项列表编写了一个节点生成器听起来是不是很熟悉?我同样需要使網格位居屏幕中央不过,要做到这点在 HTML 中比在游戏引擎中要更容易实现。尽管如此将一堆绝对定位的 div 放在中央位置也并不容易。

在這个案例中实时执行时间并不怎么很重要,因为我在加载游戏时就进行了大量的预处理

我想强调的是,TechLead 的问题可能是你会在职业生涯Φ遇到的问题但在典型的 JavaScript 应用程序中,往往不太需要考虑程序的速度

TechLead 在 Google 使用的是 Java ,我猜他面试的职位都很关心执行速度他们有可能囿一堆工作任务要处理大量的数据,因此像这样的解决方案可能是必要的

但是,这个视频也有可能是关于 HTML 和 CSS 的职位的谁知道呢!

正如伱在最终统计数据中所看到的那样,读起来最槽糕的代码几乎是最快的并且还完成了我们所有的要求。

据我自己的经验我花了更长的時间来开发非 RxJS 版本的代码。我认为这是因为更快的版本需要全面的思考。Redux-Observable 能够让你以化整为零的方式进行思考

这是一道非常有趣的问題。它起初看起来似乎很难但是将它分解成几块之后,问题就迎刃而解了

}

我要回帖

更多关于 你知道这道题怎么写吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信