【问题标题】:Data Structure Interview Question数据结构面试题
【发布时间】:2009-12-09 19:21:09
【问题描述】:

我被问到以下问题: 你将如何存储下面给出的数据(你会选择哪种数据结构):

A-1-2-3-4-5-6

|

B-7-8-9-10-11

|

C-12-14-15-16-17

我的回答: 因为这看起来像一堆列表,其头节点链接在一起。 使用两种节点类型,一种是具有以下定义的常规节点类型:

Struct node1
{
int val;
struct node*next;
};
// to store the numerical part of the data

struct node2
{
 int val;
struct node *down;
struct node* next;
};
//this is the heads of each list.. for the alphabet part of the question.

面试官的反应: 这是你能想到的最好的数据结构吗? 每个节点所需的遍历和内存如何?

我对此的回答: 如果我们创建某种哈希表,我们可以更好地遍历。

我对你们同志的问题: 我们能做得更好吗??有没有更好的方法来存储此类数据?

我们假设数据都是数字(甚至是每个头节点的数字)并且是非连续的,可能有重复。什么是正确的答案? 在 C/C++ 中寻找答案

【问题讨论】:

  • @xtofl .. 感谢您的编辑。
  • 这是一个愚蠢的问题,因为没有提供足够的信息来得出“正确”的答案。我的答案是字符串,因为您没有告诉我数据是什么、如何使用或如何修改数据。您想快速找到 15 吗?这是 --> 15. O(1) 查找。
  • 如果面试官认真地想得到一个有用的答案,他们可能希望你就数据的性质提出问题,例如它使用的上下文,内存/CPU性能权衡它应该撒谎,等等。
  • 您实际上并没有在任何地方指定应该用什么语言/语言系列来实现它。对于 C、C++、Scala 和 Perl,我的答案会非常不同。 :)
  • @Erik:当我建议上面的答案时,他们告诉我我将无法轻松遍历列表。所以我认为任何 node 的值都可以随时更改。假设我需要将值为 6 的节点更改为 999。我应该能够快速完成。所以我们正在寻找比内存权衡更快的遍历。

标签: data-structures


【解决方案1】:

我要问的第一个问题是关于数据的。 似乎是一个简单的例子,说明在哪里打破一系列连续的数字。鉴于我只会存储断点。这些类型的问题旨在测试您提出问题和深入研究潜在问题的能力。

【讨论】:

  • @Craig:假设数据最差......数字不必是连续的并且可以有重复......面试官只为这种类型的数据指定它......这是我举的例子,以便我可以轻松地提出问题......
  • 这就是重点。他(她?)试图了解你的假设。永远不要假设!客户要求比其他任何事情都更真实。你的假设总是错误的。 :)
  • @Craig:在以后的问题中会记住这一点。谢谢
【解决方案2】:

我认为这个问题的目的是让您对数据结构有想法。

如果每个节点实际上只有一个字符和 6 个整数,则不需要存储两个列表。此外,考虑如何使用它也很重要。也许甚至一个字符和一个数字范围就足够了,这取决于数据的真正含义。

【讨论】:

    【解决方案3】:

    在 C# 中,您可以使用字符串/整数数组的字典:

    Dictionary<string,int[]> 
    

    【讨论】:

      【解决方案4】:

      为了更好的遍历和内存使用,您可以考虑使用可变长度数组列表 (Java ArrayLists)

      【讨论】:

        【解决方案5】:

        如果它们的字面意思是“存储范围 #s 从 N 到 N+x”,那么您可以将其压缩为从字母到范围开始和范围结束元组的映射;)

        【讨论】:

          【解决方案6】:

          我会问这些数据将如何使用。面试官要么会透露他最初隐瞒的内容,看看你是否会问,要么会编造一些东西。然后我会问什么样的更新以及如何更新。他不太可能想得这么远,所以加分。否则,构建一个足够复杂的内存存储结构来解释所有事实,或者将其放入关系数据库中。

          【讨论】:

          • 关系数据库?我希望你在开玩笑。
          • 你至少需要Oracle企业版来存储这种数据:)
          • @Erik:为什么不是关系数据库?这是一种面试情况,问题解决者应该提供大量潜在的答案。由于问题是单独提出的,因此您无法评估最佳解决方案,因为您没有足够的信息。所以,是的,提供一个选项菜单作为答案。
          • 我认为,如果您在提到最初的问题时四处寻找,您将获得奖励积分,但以“可能将其放入关系数据库”结尾,您将撤消所有奖励积分并以“bonuspoints=-bonuspoints”结尾。
          【解决方案7】:

          我会说,以一种更简单的方式,你应该使用一个列表。

          A = [1,2,3,4,5,6]
          
          B = [7,8,9,10,11]
          
          C = [12,14,15,16,17]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-04
            • 2012-04-17
            • 1970-01-01
            • 2011-03-19
            • 2013-06-29
            相关资源
            最近更新 更多