计算C ++中数组中的不同元素

我们得到了一个任意大小的未排序数组,其中包含重复元素,并且任务是计算数组中不同元素的数量。

数组是一种数据结构,可以存储相同类型的元素的固定大小的顺序集合。数组用于存储数据集合,但是将数组视为相同类型的变量集合通常会更有用。

例如

Input− int arr[] = {1, 1, 2, 3, 3, 4, 4}Output − count is 4

解释-在给定的数组中,有4个不同的元素,分别是1、2、3、4,但是数组的大小为7,因为它包含重复的元素,我们的任务是删除重复项,然后对数组元素进行计数。

Input − int arr[] = {1, 2, 3, 4, 5, 5, 5, 5}Output − count is 5

Explanation − In the given array there are 5 distinct elements and those are 1, 2, 3, 4 and 5 but the size of array is 8 as it contains repetitive elements and our task was to remove the duplicates and then count the array elements.

Approach used in the below program is as follows

Using sort function()

  • Create an array of let’s say, arr[]

  • Calculate the length of an array using the length() function that will return an integer value as per the elements in an array.

  • Call the sort function and pass the array and the size of an array as a parameter.

  • Take a temporary variable that will store the count of distinct elements.

  • Start a loop for with i to 0 till i is less than the size of an array

  • Inside the loop, run while i < size-1 and arr[i] = arr[i+1]

  • Inside the while, increment the value of i

  • 在里面,增加count的值

  • 返回计数

  • 打印结果。

没有排序

  • 创建一个数组,比如说arr []

  • 使用length()函数将根据数组中的元素返回整数值来计算数组的长度。

  • 取一个临时变量,它将存储不同元素的计数。

  • 从i到1开始循环,直到i小于数组的大小

  • 在循环内,将j设置为0并开始另一个循环,其中j为0且j小于i并递增j wth 1

  • 在此循环中,检查arr [i] = arr [j]然后中断

  • 在此循环中,检查i = j,然后将计数加1

  • 返回计数

  • 打印结果

示例

带排序

#include <algorithm>
#include <iostream>
using namespace std;
int distinct_elements(int arr[], int n){
   //排序数组
   sort(arr, arr + n);
   //遍历排序的数组
   int count = 0;
   for (int i = 0; i < n; i++){
      //找到重复项时移动索引
      while (i < n - 1 && arr[i] == arr[i + 1]){
         i++;
      }
      count++;
   }
   return count;
}
//主要功能
int main(){
   int arr[] = { 3, 6, 5, 8, 2, 3, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout <<"count is "<<distinct_elements(arr, n);
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

count is 6

示例

不排序

#include <iostream>
using namespace std;
int countDistinct(int a[], int size){
   int i, j, count = 1;
   for (i = 1; i < size; i++){
      for (j = 0; j < i; j++){
         if (a[i] == a[j]){
            break;
         }
      }
      if (i == j){
         count++;
      }
   }
   return count;
}
//主要功能
int main(){
   int a[] = { 3, 6, 5, 8, 2, 3, 4 };
   int size = sizeof(a) / sizeof(a[0]);
   cout << "count is "<<countDistinct(a, size);
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

count is 6