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 << "绝对唯一值的计数: "; 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