在 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP