我被问到以下问题: 您将如何存储下面给出的数据(您将选择哪种数据结构):
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 ++中寻找答案
答案 0 :(得分:6)
我要问的第一个问题是数据。 出现是一个简单的案例,可以在哪里打破一系列连续数字。鉴于我只会存储断点。这些类型的问题旨在测试您提出问题并深入了解潜在问题的能力。
答案 1 :(得分:1)
我认为这个问题的目的是让您了解数据结构。
如果每个节点实际上只有一个char和6个整数,则不需要存储两个列表。此外,如何使用它将是重要的考虑因素。也许即使是字符和数字范围就足够了,这取决于数据到底是什么。
答案 2 :(得分:1)
在C#中你可以使用string / int array的字典:
Dictionary<string,int[]>
答案 3 :(得分:0)
为了更好的遍历和内存使用,您可以考虑使用可变长度数组列表(Java ArrayLists)
答案 4 :(得分:0)
如果它们的字面意思是“存储范围#s从N到N + x”,那么您可以将其压缩到从字母到范围开始和结束范围元组的映射;)
答案 5 :(得分:0)
我会问如何使用这些数据。面试官要么透露他最初保留的内容,看看你是否要求,或者做些什么。然后我会问什么样的更新以及它将如何更新。他不太可能想到这么远,所以奖金面试点。否则,组成一个内存存储结构,其结构复杂到足以说明所有事实,或者可能将其放在关系数据库中。
答案 6 :(得分:0)
我想以一种更简单的方式说,您应该使用列表。
A = [1,2,3,4,5,6]
B = [7,8,9,10,11]
C = [12,14,15,16,17]