【问题标题】:developing a function that returns number of distinct values that exist in array开发一个函数,该函数返回数组中存在的不同值的数量
【发布时间】:2018-09-30 07:17:13
【问题描述】:

我想创建一个函数,它可以返回给定数组中存在的多个不同值。例如,如果数组是

array[5] = { 1 3 4 1 3},返回值应该是3(数组中的3个唯一数字)。

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

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

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

【问题讨论】:

  • 将语言添加为标签。
  • 原始数组可以修改吗?为什么不使用 hashmap?
  • 无修改....如果我传递数组,我希望函数返回唯一值的数量。我确定可以使用 if 语句,但我不确定如何使用它。

标签: c arrays function for-loop


【解决方案1】:

array 中的元素添加到 std::set&lt;T&gt; 中,由于 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();

}

【讨论】:

    【解决方案2】:
    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 循环开始,第一个 (0th) 元素与它之后的元素进行比较。 如果元素再次出现,即if (current==arr[j]),则count 的值减1(因为我们期望所有元素都是唯一的,并且因为它不是唯一的,所以唯一值的数量现在比它的数量少一最初是。因此--count)。 循环继续,无论唯一元素的数量是多少,该值都会递减。 如果我们的数组是{1,1,1,1},那么代码将打印0 而不是负值。 希望有帮助。 快乐编码。 :)

    【讨论】:

      【解决方案3】:

      我喜欢 wdc 的答案,但我将提供一个仅使用数组和整数的替代方案,因为您需要使用 c 进行编码,而 wdc 的答案是 c++ 答案:

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

      【讨论】:

      • 干杯,我会试试你的方法
      • 那将是非常低效的,除非 repArray 是一个 hashmap
      猜你喜欢
      • 2015-08-22
      • 2021-12-18
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2013-07-02
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多