C - 开发一个函数,该函数返回数组中存在的非重复值的数量



我想创建一个函数,该函数可以返回给定数组中存在的非重复值。如果例如数组是

array[5] = { 1 3 4 1 3},返回值应为 3(数组中有 3 个唯一数(。

到目前为止,我只得到了这个:

int NewFucntion(int values[], int numValues){
for (i=0; i<numValues; i++){

我是一个新的编码员/C语言的新手,我坚持如何继续。任何指导将不胜感激。谢谢

将元素从array添加到std::set<T>,由于set不允许重复元素,因此您只能从集合中获取元素的数量,这为您提供了不同元素的数量。

例如:

#include<set>
int NewFucntion(int values[], int numValues){
std::set<int> set;  
for(int i=0; i<numValues; i++){
set.insert(values[i]);
}
return set.size();
}
int distinct(int arr[], int arr_size){
int count = arr_size;
int current;
int i, j;
for (i = 0; i < arr_size; i++){
current = arr[i];
for (j = i+1; j < arr_size; j++) // checks values after [i]th element.
if (current == arr[j])
--count; // decrease count by 1;
}
if (count >= 0)
return count;
else return 0;
}

这是解释。 数组及其大小作为参数传递。current存储要与其他元素进行比较的元素。count是我们最终需要的数字。count被分配数组的大小值(即我们假设所有元素都是唯一的(。 (也可以反过来(for循环启动,并将第一个(第 0 个(元素与其后面的元素进行比较。 如果元素再次出现,即if (current==arr[j]),则count的值减少 1(因为我们期望所有元素都是唯一的,并且因为它不是唯一的,所以唯一值的数量现在比最初少 1。因此--count(。 循环继续,值递减到唯一元素的数量。 如果我们的数组是{1,1,1,1},那么代码将打印0而不是负值。 希望有帮助。 快乐编码。:)

我喜欢 wdc 的答案,但我会给出一个仅使用数组和整数的替代方案,因为您要用 c 编码,WDC 的答案是 c++ 答案:

要做这件事,你需要做的是像你一样遍历你的数组,并将你经过的新数字存储在一个不同的数组中,让我们称之为 repArray,那里不会有任何重复;因此,每次向此数组添加内容时,都应检查该数字是否不存在。 您需要创建它并为其指定大小,那么为什么不 numValues,因为它不能比这更长。还有一个整数,指定有多少索引是有效的,换句话说,你写了多少个,比如说validIndexes。因此,每次向 repArray 添加 NEW 元素时,都需要递增 validIndexes。 最后,validIndexes将是你的结果。

最新更新