2009-12-09 27 views
3

我提出以下問題: 你如何存儲下面給出的數據(數據結構將ü選哪):數據結構面試問題

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

| 

B-7-8-9-10-11 

| 

C-12-14-15-16-17 

我答: 因爲這看起來像一堆其頭節點鏈接在一起的列表。 使用兩節點類型一個ID的常規節點類型,定義如下:

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. 

面試官的反應: 這是最好的數據結構U能想到的。 每個節點所需的遍歷和內存方面如何?

我對此的回答: 如果我們創建某種散列表,我們可以更好地遍歷。

我的問題給你的同志們: 我們可以做得更好嗎?有沒有更好的方法來存儲這種類型的數據?

我們假設數據是全部數字(甚至每個頭節點處的數據),並且非串行可能有重複。什麼是正確答案? 尋找在C/C++

+0

@xtofl ..感謝編輯。 – tomkaith13 2009-12-09 19:28:40

+6

這是一個愚蠢的問題,因爲沒有足夠的信息來達到「正確」的答案。我的答案是字符串,因爲你什麼都沒告訴我數據是什麼,它如何使用或如何修改。你想快速找到15?這裏是 - > 15.O(1)查找。 – 2009-12-09 19:28:45

+1

如果面試官對於獲得有用的答案是認真的,他們可能期望您提出有關數據性質的問題,例如使用的上下文,內存/ CPU性能折衷的位置,等等。 – 2009-12-09 19:32:04

回答

6

我想問的第一個問題是關於數據。它出現是一個簡單的情況下,打破一系列連續的數字。鑑於我只會存儲斷點。這些類型的問題旨在測試您提出問題的能力並深入研究潛在問題。

+0

@Craig:假設最壞的生根粉數據....數字不必是串行,可以有重複...的interviwer力只爲這種類型的數據指定其...這是我忍了,這樣的例子我可以輕鬆地設定問題... – tomkaith13 2009-12-09 19:31:57

+1

這就是要點。他(她?)試圖感受你的ASSUMTIONS。永不假定!客戶要求比其他要求更真實。你的暗示總是錯誤的。 :) – Craig 2009-12-09 19:37:57

+0

@克雷格:將繼續關注未來的問題。謝謝 – tomkaith13 2009-12-09 19:44:12

0

答案爲了更好地遍歷和內存使用情況,您可以考慮使用可變長度陣列列表(Java的ArrayList)

1

我覺得這個問題的目的是從得到的想法你關於數據結構。

如果每個節點只有一個char和6個整數,則不需要存儲兩個列表。此外,如何使用它將是重要的考慮因素。也許即使是字符和數字範圍就足夠了,這取決於數據的真實性。

0

如果它們的字面意思是「存儲範圍從N到N + x」,則可以將其壓縮爲從字母到範圍開始和範圍結束的映射;)

0

我會問如何使用數據。面試官要麼透露他最初隱瞞的問題,看看你是否會問,或者做些什麼。然後我會問什麼樣的更新以及如何更新。對他來說,這遠遠不會有這樣的想法,所以獎金面試點。否則,構建一個足夠複雜的內存存儲結構來解釋所有事實,或者將其放入關係數據庫中。

+0

關係數據庫?我希望你在開玩笑。 – 2009-12-09 19:33:20

+0

您至少需要企業版的Oracle存儲這種數據:) – Jan 2009-12-09 19:44:27

+0

@Erik:爲什麼不是關係數據庫?這是一個採訪問題,應該由問題解決者提供豐富的答案。由於問題是單獨提出的,因此您無法評估* best *解決方案,因爲您沒有足夠的信息。所以,是的,提供一個選項菜單作爲答案。 – wallyk 2009-12-09 20:07:46

1

在C#中,你可以使用字符串/ int數組的詞典:

Dictionary<string,int[]>