在 C++ 中对排序数组进行绝对去重计数?


数组是相同数据类型元素的集合。排序数组是指元素按升序或降序排列的数组。

去重计数是指不相同的元素的数量。

绝对去重计数是指元素绝对值的去重计数,即不带符号(无符号值)的元素。

在本程序中,我们将找到排序数组中的绝对去重计数。即,如果考虑数组中每个元素的绝对值,我们将计算不同值的个数。

例如,

Input : [-3 , 0 , 3 , 6 ]
Output : 3

数组中有 3 个不同的绝对值,元素为 0、3 和 6。

为了解决这个问题,我们有几种方法,使用不同的方式。

使用集合

集合始终包含不同的元素。因此,我们将检查集合中的绝对值,如果它不可用,我们将向集合中添加元素。并返回集合的大小。

算法 -

  • 创建一个与数组相同数据类型的集合。

  • 找到每个元素的绝对值并将元素存储在数组中。即使遇到多个值,集合也会存储一个唯一值。

  • 输入所有元素后。返回集合的长度。这将给出数组中不同元素的数量。

示例

实时演示

#include <bits/stdc++.h>
using namespace std;
int main() {
   int arr[] = {-3, 0, 2, 6};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Count of absolute distinct values : ";
   unordered_set<int> s;
   for (int i = 0 ; i < n; i++)
      s.insert(abs(arr[i]));
      int nof = s.size();
      cout<<nof;
      return 0;
}

输出

Count of absolute distinct values : 4

使用数组检查和计数变量

此方法仅使用单个变量而不是集合。我们将为您提供一个计数变量来计算数组中不同元素的数量。

示例

实时演示

#include <iostream>
using namespace std;
int main() {
   int arr[] = {-5, -1, 0, 5, 8};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Count of absolute distinct values : ";
   int count = n;
   int i = 0, j = n - 1, sum = 0;
   while (i < j) {
      while (i != j && arr[i] == arr[i + 1])
         count--, i++;
      while (i != j && arr[j] == arr[j - 1])
         count--, j--;
      if (i == j)
         break;
      sum = arr[i] + arr[j];
      if (sum == 0) {
         count--;
         i++, j--;
      }
      else if(sum < 0)
         i++;
      else
         j--;
   }
   cout<< count;
   return 0;
}

输出

Count of absolute distinct values : 4

更新于: 2020-07-06

232 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.