2010-05-07 52 views
-4

我需要計數數組中的相似元素。例如,如果我有一個數組, 數組[0,0,0,1,2,3,3]。0的數目是3,否。 1的是1,沒有。 2的是1,沒有。 3的是在這個陣列2。如果此消息之前已發佈,我很抱歉。幫助表示讚賞。提前致謝。計數數組中的相似iTems

問候,

THM

PS:語言是C/C++

+2

它是C還是C++?他們是非常不同的語言。 – 2010-05-07 11:36:52

+3

它是功課嗎? – n0rd 2010-05-07 11:37:19

+0

@Mike好吧,我道歉,我需要它在C++。 – 2010-05-07 13:48:02

回答

2

我能想到的幾個選項:

  1. 副本的陣列爲std::multiset<>,然後使用count()equal_range()成員函數返回計數

  2. 創建std::map<T,unsigned>。映射鍵(數組條目類型爲T,這將是您示例中的整數類型)是數組條目,該值是計數。如果在遍歷數組時每次遇到具有該值的元素,都會增加與某個值相關聯的計數

  3. 如果對數組進行排序,則使用std::equal_range()查找連續的相等元素並對它們進行計數。

當然還有很多,包括只是迭代,直接計數。

5

你可以使用一個std ::地圖存儲和適應基於陣列進入你的結果,而迭代陣列。我希望這個提示有助於你的任務。

0

嗯,我認爲這是一個家庭作業。糾正我,如果我錯了。

如果我要求你實現算法,你會怎麼做?您可以從樣本輸入中看到,在對輸入進行分組時,更容易計算每個組的成員,而不是按任意順序進行混洗。如果你對輸入進行排序,那麼你會得到各種元素分組。然後,您只需要遍歷序列一次以計算每個組的成員。

如果算法能夠正常工作,請嘗試對其進行優化,使其不會多次讀取輸入序列的某個元素。如果你能夠滿足保證每個元素只被讀取一次,並且元素從開始到結束的順序被讀取,那麼你的算法將對來自輸入流的輸入直接進行處理,比如stdin(只要它被排序),而不需要先將輸入流中的輸入複製到臨時容器中。

+0

非常感謝這樣一個詳細的答覆。 其實它不是我的任務。我的一位朋友向我求助, 我是一名IT專業人員,爲一家軟件公司工作。事實上,自從我在C++工作以來,這已經很長時間了。我的一位朋友向我索要這樣的密碼。我在這裏發佈它,認爲我可能會很快得到答案 – 2010-05-07 13:56:57