数组是相同数据类型的元素的集合。甲排序后的数组是具有存储在升序或降序排列的序列元素的数组。
唯一计数是不相同的元素数。
绝对唯一计数是元素的绝对值的唯一计数,即没有符号的元素(无符号值)。
在此程序中,我们将在排序数组中找到绝对不同的计数。也就是说,如果考虑数组中每个元素的绝对值,我们将计算不同值的数量。
例如,
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 << "绝对唯一值的计数: ";
unordered_set<int> s;
for (int i = 0 ; i < n; i++)
s.insert(abs(arr[i]));
int nof = s.size();
cout<<nof;
return 0;
}绝对唯一值的计数: 4
此方法仅使用单个变量而不是集合。我们将为您提供一个count变量,以对数组的不同元素进行计数。
#include <iostream>
using namespace std;
int main() {
int arr[] = {-5, -1, 0, 5, 8};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "绝对唯一值的计数: ";
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;
}绝对唯一值的计数: 4