我需要计算数组中的相似元素。例如,如果我有一个数组, 数组[0,0,0,1,2,3,3] .0的数量是3,没有。 1的是1,没有。 2的是1,没有。这个数组中3的3是2。如果此消息已经发布,我很抱歉。感谢帮助。提前谢谢。
此致
THM
P.S:语言是C / C ++
答案 0 :(得分:5)
您可以使用std :: map来存储和调整基于数组条目的结果,同时迭代数组。我希望这个提示有助于你的任务。
答案 1 :(得分:2)
我可以想到几个选项:
将数组复制到std::multiset<>
,然后使用count()
或equal_range()
成员函数返回计数
创建std::map<T,unsigned>
。映射键(数组条目类型T
,将是您示例中的整数类型)是数组条目,值是计数。每次在迭代数组时遇到具有该值的元素时,递增与值关联的计数
如果对数组进行排序,请使用std::equal_range()
查找连续的相等元素,并对其进行计数。
当然还有更多,包括迭代和直接计算。
答案 2 :(得分:0)
啊,我认为这是一个家庭作业。如果我错了,请纠正我。
如果我要求您实施算法,您会怎么做?您可以从示例输入中看到,当输入分组时,更容易计算每个组的成员,而不是按任意顺序进行混洗。如果您对输入进行排序,那么您将获得分组的各种元素。然后,您只需要迭代序列一次,以便计算每个组的成员。
当算法运行时,尝试对其进行优化,使其不会多次读取输入序列的元素。如果您能够保证每个元素只读取一次,并且元素从头到尾按顺序读取,那么您的算法将直接从输入流(如stdin)进行输入(只要它将被排序),无需先将输入流中的输入复制到临时容器中。