2010-05-07 26 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